2013-08-25 75 views
0

我需要在我的代碼中使用一個條件變量。查看android API,我看到包android.os包含ConditionVariable。但是我也在java.util.concurrent.locks下找到了ConditionCondition或ConditionVariable有什麼區別?

這兩個類似乎是爲相同的目的而設計的。

Condition.await() <-> ConditionVariable.block() 
Condition.signal() <-> ConditionVariable.open() 

有什麼區別我應該知道嗎?

回答

1

正如您鏈接的文檔中所述,Condition可以喚醒單個線程,而不是喚醒所有等待線程(signal vs signalAll)。

ConditionVariable是基於狀態的,並且因此允許保持打開狀態(相對於在單一時間釋放所有等待的線程,能夠在所有的使用openclose不阻塞線程)。


所以,你應該用Condition如果

  • 你必須要到正規的Java兼容(例如用於PC /服務器/任何應用程序,也圖書館),作爲ConditionVariable不在那裏可用。
  • 你需要喚醒螺紋
  • (我的個人意見)你不需要的ConditionVariable缺相,爲signalAll一個呼叫更好比open,隨後直接close閱讀。

ConditionVariable如果

  • 你有你的應用程序中的階段,你不需要任何阻擋在所有
0

使用的Android ConditionVariable當其本質上是一種單次使用block()你應該使用。

使用的Java Condition當你有一個循環,在await()

等待的原因是,有對服務員block()沒有線程安全的方式,然後close()(不使用額外的同步機制)。

See examples of ConditionVariable here

See examples of Condition here