[英]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.