你所不知道的 Java synchronized 关键字

在本文开始前,先给大家分享几个好用的IDEA激活码

这里提供几个最新的激活码,有需要的朋友可以试试,先到先用:

2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新)

2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新)

2022和2023Webstorm激活码,Webstorm稳定专属激活码(持续更新)

2022和2023Phpstorm激活码,Phpstorm稳定专属激活码(持续更新)

2022和2023Goland激活码,Goland稳定专属激活码(持续更新)

 

接受采访时,我通常会问到Java 中的synchronized关键字,我从几乎每个人那里得到了正确的理论答案。这就是我收到答案的方式。如果一个块或一个方法是同步的,只有一个线程可以进入该方法并阻塞,另一个线程将等待直到前一个线程尚未退出该方法或块。

我询问了程序的行为。我要求读者在阅读博客的其余部分之前先猜测其行为。

大多数情况下,受访者会给出以下答案:

假设名为 Thread1 的线程 t1 进入同步块,它将打印“ Thread1 已进入同步块”。然后它将休眠 5 秒钟。同时,Thread2会在注释为第3行的行中等待,Thread1退出后,Thread2会进入block,打印“ Thread2 has entered the synchronized block ”并休眠5分钟,之后整个程序结束。

如果你的回答和上面一样,那么你就缺少对 synchronized 关键字的批判性理解。基本上,当我们使用 synchronized 关键字时,我们通常会锁定类的实例或 Class 对象(对于该类的所有实例只有一个)本身。在这种情况下,我们锁定了 this 关键字,这意味着 Task 类的实例。在第 1 行和第 2 行创建线程时,我们使用了 new Task(),这意味着同一类任务的两个不同对象。因此,Thread1 和 Thread2 已经在同一个类的不同实例上获取了锁,因此这两个线程将只使用自己的锁进入同步块,不会相互等待。所以,答案应该是

Thread1已经进入synchronized块。马上, Thread2 已经进入synchronized就会被打印出来。 两个线程将同时等待 5 秒,程序将终止。

然后,行为将与我首先解释的行为完全相同,即 Thread1 将打印Thread1 已进入同步块并等待 5 秒。退出后,Thread2 会打印Thread2 has entered the synchronized block and will sleep for 5 seconds。退出后,程序将终止。

这是一件非常小的事情,但是在准备面试或编写多线程代码时需要注意这一点。实现信号量、循环屏障、倒计时锁存器或可重入锁时也是如此。

希望你已经掌握了这篇博客的要点。

发布者:admin,转转请注明出处:https://www.ajihuo.com/soft/5560.html

(0)
上一篇 2023年6月16日 上午10:09
下一篇 2023年6月27日 上午6:50

相关推荐

  • 你需要学习一个框架才能找到一份程序员的工作吗?

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2022年12月19日
    00
  • 从 Java 8 迁移到 Java 17 的 7 个理由

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年6月9日
    00
  • IntelliJ IDEA 专业提示

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年2月8日
    00
  • Spring Boot 2.0 — 项目结构和最佳实践(第 2 部分)

    在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023Webstorm激活码,Webstorm稳定专属激活码(…

    2023年4月6日
    00
  • 什么是响应式网页设计?

    PS: 本教程最新更新时间: 2022年12月18日~ 在本文开始前,先给大家分享几个好用的IDEA激活码 这里提供几个最新的激活码,有需要的朋友可以试试,先到先用: 2022和2023Intellij IDEA最新激活码,IDEA稳定专属激活码(持续更新) 2022和2023Pycharm激活码,Pycharm稳定专属激活码(持续更新) 2022和2023…

    2022年12月18日
    00

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注