【问题标题】:What is the difference between Condition or ConditionVariable?Condition 或 ConditionVariable 有什么区别?
【发布时间】:2013-08-25 16:53:33
【问题描述】:
我需要在我的代码中使用条件变量。查找android API,我看到包android.os 包含ConditionVariable。但我也在 java.util.concurrent.locks 下找到了Condition。
这两个类似乎是为同一个目的而设计的。
Condition.await() <-> ConditionVariable.block()
Condition.signal() <-> ConditionVariable.open()
有什么我应该注意的区别吗?
【问题讨论】:
标签:
android
multithreading
condition-variable
【解决方案1】:
如您链接的文档中所述,Condition 可以唤醒单个线程,而不是唤醒所有等待的线程(signal 与 signalAll)。
ConditionVariable 是基于状态的,因此允许保持条件打开(与一次释放所有等待线程相比,使用open 和close 可以完全不阻塞线程)。
所以你应该使用Condition if
- 您需要与常规 Java 兼容(例如,在用于 PC/服务器/任何应用程序的库中),因为那里没有
ConditionVariable。
- 您需要唤醒单个线程
- (我的个人意见)你不需要
ConditionVariable 的开放阶段,因为单个调用signalAll 比直接调用open 后跟close 更容易阅读。
虽然你应该使用ConditionVariable if