【问题标题】: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 可以唤醒单个线程,而不是唤醒所有等待的线程(signalsignalAll)。

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


    所以你应该使用Condition if

    • 您需要与常规 Java 兼容(例如,在用于 PC/服务器/任何应用程序的库中),因为那里没有 ConditionVariable
    • 您需要唤醒单个线程
    • (我的个人意见)你不需要ConditionVariable 的开放阶段,因为单个调用signalAll 比直接调用open 后跟close 更容易阅读。

    虽然你应该使用ConditionVariable if

    • 您的应用程序中有一些阶段根本不需要任何阻塞

    【讨论】:

      【解决方案2】:

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

      当您有一个等待 await() 的循环时,请使用 Java Condition

      原因是没有线程安全的方式让服务员先到block(),然后再到close()(不使用额外的同步机制)。

      See examples of ConditionVariable here.

      See examples of Condition here.

      【讨论】:

        猜你喜欢
        • 2013-11-18
        • 2019-08-06
        • 1970-01-01
        • 2018-12-15
        • 2011-10-18
        • 2010-09-24
        • 2015-10-07
        • 1970-01-01
        • 2017-05-25
        相关资源
        最近更新 更多