你所不知道的 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

相关推荐

  • 你的求职:10 大 JavaScript 面试问题

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

    2023年1月4日
    00
  • 如果你知道如何编码,你会在人群中脱颖而出的 10 个工作

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

    2022年10月15日
    00
  • 成为自由程序员的成功秘诀

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

    2023年1月12日
    00
  • Java 中的事务管理是什么?

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

    2022年10月17日
    00
  • Intellij idea是什么,怎么使用

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

    2023年2月11日
    00

发表回复

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