當達到countDown時,可以保持線程在命令等待時的順序。CountDownLatch:保留countDown上的線程順序達到
如果線程1調用在線程2之前等待,那麼它們應該按照相同的順序重新排列。
這是否有意義:)?
當達到countDown時,可以保持線程在命令等待時的順序。CountDownLatch:保留countDown上的線程順序達到
如果線程1調用在線程2之前等待,那麼它們應該按照相同的順序重新排列。
這是否有意義:)?
看起來好像你在談論CountDownLatch
中的某種公平。
一般來說,公平性並不是真正的倒計時鎖存器問題(特別是在Java及其實現中的java.util.concurrent
)。當達到預定數量的倒計數時,鎖存器將發信號通知所有等待它的線程。
飢餓或調度順序與閂鎖功能在這一點上是正交的 - 從等待線程的集合/隊列中沒有受控選擇的概念,就像你可能用信號量或互斥體一樣。
貝爾巴托夫的季米特洛夫說,
...有一個從等待線程組/隊列中沒有控制的選擇的概念,因爲你可以用旗語或互斥有。
那是因爲在一個信號燈或互斥的單一操作永遠只能釋放一個等待線程。如果有多個線程正在等待,可以通過說明第一個操作釋放這個線程來定義它們的釋放順序,然後下一個操作釋放該線程,依此類推。
CountDownLatch是不同的,因爲當理想的行爲是單個操作在同一時刻釋放所有等待的線程時,嘗試定義一個訂單有什麼意義?
相關但不同:http://stackoverflow.com/q/17093432/693752 – Snicolas