我需要在代码中使用条件变量。查看android API,我看到android.os包中包含ConditionVariable。但我也在java.util.concurrent.locks下找到了Condition。
这两个类似乎是为了同一目的而设计的。
Condition.await() <-> ConditionVariable.block()
Condition.signal() <-> ConditionVariable.open()
我应该注意哪些差异?
答案 0 :(得分:1)
正如您链接的文档中所述,Condition
可以唤醒单个主题,而不是唤醒所有等待的主题(signal
vs signalAll
)。
ConditionVariable
是基于状态的,因此允许保持条件打开(与一次释放所有等待线程相反,使用open
和{{可能无法阻止线程1}})。
所以你应该使用close
if
Condition
不可用。ConditionVariable
的开放阶段,因为对ConditionVariable
的单个调用比signalAll
直接跟open
更好。 }。,如果
,则应使用close
答案 1 :(得分:0)
使用Android ConditionVariable
时,基本上只需使用block()
。
当您有一个等待Condition
await()
原因是服务员没有线程安全的方式block()
然后close()
(不使用其他同步机制)。