簡體   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