休眠一个线程,直到另一个线程参加了一个事件

时间:2020-03-06 14:36:21  来源:igfitidea点击:

我在Android应用程序中有两个线程,一个是视图线程,另一个是工作线程。我想做的是,使工作线程休眠,直到视图线程终止onDraw方法的处理为止。

我该怎么做?是否有等待信号的东西?

解决方案

在两个线程之间共享一个java.lang.Object,其唯一目的是告诉工作线程何时可以继续工作。每当工作线程到达应休眠的位置时,它将执行以下操作:

stick.wait();

当视图线程完成其onDraw工作时,它将调用此方法:

stick.notify();

请注意,视图线程拥有对象上的监视器的要求。在情况下,使用一个小的同步块可以很容易地实现这一点:

void onDraw() {
  ...
  synchronized (stick) {
    stick.notify();
  }
} // end onDraw()

有关这些方法,请向javadoc咨询java.lang.Object(以防万一,请注意notifyAll);他们写得很好。

如果我们需要更高级别的并发API(例如Barriers),则可以尝试Java 5并发API的反向移植,该Java 5并发API适用于Java 1.3及更高版本,并且可能适用于Android。 Object.wait / notify之类的东西可以使用,但是它们可能有点简洁。

Backport-util-concurrent