Java 倒数锁存器是否受到虚假唤醒的影响?

Java 倒数锁存器是否受到虚假唤醒的影响?,java,multithreading,countdownlatch,Java,Multithreading,Countdownlatch,诸如等待/通知和锁定/条件之类的并发管理机制似乎受到影响。开发人员通过重新检查条件是否确实发生了变化来满足这些意外的唤醒 说到倒计时闩锁,伪唤醒是一个问题吗?国家的javadoc 如果当前计数大于零,则当前线程 出于线程调度目的被禁用,并处于休眠状态,直到 发生以下两种情况之一: 由于调用countDown()方法,计数达到零;或 其他线程会中断当前线程 休眠意味着该方法不会返回。换句话说,尽管可能会发生虚假唤醒,但它不会导致wait方法返回 您可以通过查看来了解这是如何做到的,但简而言之,

诸如等待/通知和锁定/条件之类的并发管理机制似乎受到影响。开发人员通过重新检查条件是否确实发生了变化来满足这些意外的唤醒

说到倒计时闩锁,伪唤醒是一个问题吗?

国家的javadoc

如果当前计数大于零,则当前线程 出于线程调度目的被禁用,并处于休眠状态,直到 发生以下两种情况之一:

  • 由于调用
    countDown()
    方法,计数达到零;或
  • 其他线程会中断当前线程
休眠意味着该方法不会返回。换句话说,尽管可能会发生虚假唤醒,但它不会导致
wait
方法返回

您可以通过查看来了解这是如何做到的,但简而言之,这是典型的循环和“等待”(通过
LockSuport#park
Object#wait
,受虚假唤醒的影响)直到满足条件的技巧

当涉及到
倒计时闩锁时
,虚假唤醒是一个问题吗


否。

对象.wait/Condition.wait方法会受到“虚假唤醒”的影响

countdownlock
中的
wait
方法将等待到

  • 由于调用countDown()方法,计数达到零; 或者其他线程中断当前线程;或指定的 等待时间过去了
因此,即使出现虚假唤醒,由于计数尚未达到,它也不会返回

因此,像
倒计时闩锁
循环载波
等同步器不会受到虚假唤醒的影响。

虚假唤醒是一种记录在案的等待/通知行为。他们没有记录倒计时闩锁。如果倒计时闩锁以未记录的方式运行,那将是一个bug。也就是说,如果您使用wait/notify实现CountDownLatch,那么就由您来正确处理虚假唤醒,而不是将责任推给您的客户机。