Condition或ConditionVariable有什么区别?

时间:2013-08-25 16:53:34

标签: android multithreading condition-variable

我需要在代码中使用条件变量。查看android API,我看到android.os包中包含ConditionVariable。但我也在java.util.concurrent.locks下找到了Condition

这两个类似乎是为了同一目的而设计的。

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

我应该注意哪些差异?

2 个答案:

答案 0 :(得分:1)

正如您链接的文档中所述,Condition可以唤醒单个主题,而不是唤醒所有等待的主题(signal vs signalAll)。

ConditionVariable是基于状态的,因此允许保持条件打开(与一次释放所有等待线程相反,使用open和{{可能无法阻止线程1}})。


所以你应该使用close if

  • 您需要与常规Java兼容(例如,在用于PC /服务器/任何应用程序的库中),因为Condition不可用。
  • 你需要唤醒单个线程
  • (我的个人观点)您不需要ConditionVariable的开放阶段,因为对ConditionVariable的单个调用比signalAll直接跟open更好。 }。

,如果

,则应使用close
  • 您的应用程序中有一些阶段,您根本不需要任何阻止

答案 1 :(得分:0)

使用Android ConditionVariable时,基本上只需使用block()

当您有一个等待Condition

的循环时,请使用Java await()

原因是服务员没有线程安全的方式block()然后close()(不使用其他同步机制)。

See examples of ConditionVariable here

See examples of Condition here