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

相关推荐

  • JAVA WEB: 还从服务器取日志?自己设置日志采集不是更方便吗?

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

    2天前
    00
  • 一劳永逸: IDEA最新激活码2022(2022IDEA最新激活码)

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

    2023年3月27日
    00
  • 为什么 Java 人员对 Node.js 和 JavaScript 如此兴奋?

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

    2023年7月16日
    00
  • 阿里 P8 的《SpringBoot 进阶笔记.PDF》来了

    下载链接:https://pan.baidu.com/s/1z6GYUWK0NV7QFRYMUd5VDw?pwd=1234 提取码:1234 下面是部分内容截图 给大家分享的是阿里P8大佬整理的SpringBoot进阶笔记,含有60多篇精华文章,目录如下,建议大家认真看下目录,会发现很多是你们想要的。    

    2023年2月15日
    00
  • Java 21 的力量!

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

    2023年6月16日
    00

发表回复

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