[英]Is CountDownLatch affected by spurious wakeups?
并发管理机制(如wait / notify和lock / condition)似乎受到虚假唤醒的影响。 开发人员通过重新检查条件确实已经改变来满足那些意外的唤醒。
在CountDownLatch中,虚假的唤醒是一个问题吗?
CountDownLatch#await()
的javadoc说明
如果当前计数大于零,则当前线程将被禁用以进行线程调度,并且在发生以下两种情况之一之前处于休眠状态:
- 由于
countDown()
方法的调用,计数达到零; 要么- 其他一些线程会中断当前线程。
休眠意味着该方法不会返回。 换句话说,虽然可能发生虚假唤醒,但它不会导致await
方法返回。
您可以查看实现 ,看看它是如何完成的,但简而言之,它是典型的循环和“等待”技巧(通过LockSuport#park
或Object#wait
受虚假唤醒影响)直到满足条件。
在
CountDownLatch
,虚假的唤醒是一个问题吗?
没有。
Object.wait/Condition.await
方法受到“虚假唤醒”的影响。
CountDownLatch
的await
方法将一直等到
因此,即使发生虚假的唤醒,由于计数尚未到达,它也不会返回。
所以像CountDownLatch
, CyclicBarrier
等同步器不会受到虚假的唤醒。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.