0

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

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

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

有什么我应该注意的区别吗?

4

2 回答 2

1

如您链接的文档中所述,Condition可以唤醒单个线程,而不是唤醒所有等待的线程(signalvs signalAll)。

ConditionVariable是基于状态的,因此允许保持条件打开(与一次释放所有等待线程相比,使用openand可以完全不阻塞线程close)。


所以你应该使用Conditionif

  • 您需要与常规 Java 兼容(例如,在用于 PC/服务器/任何应用程序的库中),因为ConditionVariable那里不可用。
  • 你需要唤醒单线程
  • (我个人的观点)你不需要 . 的开放阶段ConditionVariable,因为单个调用signalAllopen直接跟随close.

而你应该使用ConditionVariableif

  • 您的应用程序中有阶段根本不需要任何阻塞
于 2013-08-25T17:08:09.270 回答
0

ConditionVariable当它本质上是单次使用时使用 Android block()

Condition当你有一个等待的循环时使用 Javaawait()

原因是等待者没有线程安全的方式block()然后close()(不使用额外的同步机制)。

ConditionVariable请参阅此处的示例

Condition请参阅此处的示例

于 2015-06-02T05:39:37.420 回答