繁体   English   中英

CountDownLatch是否受到虚假唤醒的影响?

[英]Is CountDownLatch affected by spurious wakeups?

并发管理机制(如wait / notify和lock / condition)似乎受到虚假唤醒的影响。 开发人员通过重新检查条件确实已经改变来满足那些意外的唤醒。

在CountDownLatch中,虚假的唤醒是一个问题吗?

CountDownLatch#await()的javadoc说明

如果当前计数大于零,则当前线程将被禁用以进行线程调度,并且在发生以下两种情况之一之前处于休眠状态:

  • 由于countDown()方法的调用,计数达到零; 要么
  • 其他一些线程会中断当前线程。

休眠意味着该方法不会返回。 换句话说,虽然可能发生虚假唤醒,但它不会导致await方法返回。

您可以查看实现 ,看看它是如何完成的,但简而言之,它是典型的循环和“等待”技巧(通过LockSuport#parkObject#wait受虚假唤醒影响)直到满足条件。

CountDownLatch ,虚假的唤醒是一个问题吗?

没有。

Object.wait/Condition.await方法受到“虚假唤醒”的影响。

CountDownLatchawait方法将一直等到

  • 由于countDown()方法的调用,计数达到零; 或其他一些线程中断当前线程; 或指定的等待时间过去了。

因此,即使发生虚假的唤醒,由于计数尚未到达,它也不会返回。

所以像CountDownLatchCyclicBarrier等同步器不会受到虚假的唤醒。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM