在构造函数中使用ConditionVariable

时间:2014-09-17 07:07:16

标签: java android multithreading condition-variable

此代码用作构造函数的一部分以初始化实例。 我想知道ConditionVariable的确切目的是什么?

我唯一的猜测是调用线程在初始化完成之前无法获取对此类的锁定。我的想法是否正确?

final ConditionVariable conditionVariable = new ConditionVariable();
new Thread() {
  @Override
  public void run() {
    synchronized (SimpleCache.this) {
      conditionVariable.open();
      initialize();
    }
  }
}.start();
conditionVariable.block();

这是完整代码的链接: https://github.com/google/ExoPlayer/blob/553a1d2ec15b3d34f76aff720d42de2f663eb55f/library/src/main/java/com/google/android/exoplayer/upstream/cache/SimpleCache.java

1 个答案:

答案 0 :(得分:1)

如果没有剩下的代码,它是不可能确定的,但看起来这是一种在后台线程上运行复杂的初始化代码但仍然有主线程等到初始化为止的稍微hacky方式完成。对initialize()的调用发生在后台,但conditionVariable.block()会一直等到它完成。

但是,我想知道重点是什么。如果.block()调用确实阻塞了,那么它就像直接初始化那样绑定主线程。也许.block()进行一些轮询,但也允许运行GUI事件或其他东西。没有代码很难确定...