我需要在我的代码中使用条件变量。查找 android API,我看到包 android.os 包含ConditionVariable。但我也在java.util.concurrent.locks 下找到了Condition 。
这两个类似乎是为同一目的而设计的。
Condition.await() <-> ConditionVariable.block()
Condition.signal() <-> ConditionVariable.open()
有什么我应该注意的区别吗?
我需要在我的代码中使用条件变量。查找 android API,我看到包 android.os 包含ConditionVariable。但我也在java.util.concurrent.locks 下找到了Condition 。
这两个类似乎是为同一目的而设计的。
Condition.await() <-> ConditionVariable.block()
Condition.signal() <-> ConditionVariable.open()
有什么我应该注意的区别吗?
如您链接的文档中所述,Condition可以唤醒单个线程,而不是唤醒所有等待的线程(signalvs signalAll)。
ConditionVariable是基于状态的,因此允许保持条件打开(与一次释放所有等待线程相比,使用openand可以完全不阻塞线程close)。
所以你应该使用Conditionif
ConditionVariable那里不可用。ConditionVariable,因为单个调用signalAll比open直接跟随close.而你应该使用ConditionVariableif
ConditionVariable当它本质上是单次使用时使用 Android block()。
Condition当你有一个等待的循环时使用 Javaawait()
原因是等待者没有线程安全的方式block()然后close()(不使用额外的同步机制)。