睡眠一个线程,直到在另一个线程中出现一个事件

时间:2008-09-23 15:32:20

标签: java android multithreading

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

我怎么能这样做?有没有等待信号或什么?

2 个答案:

答案 0 :(得分:38)

在两个线程之间共享一个java.lang.Object,其唯一目的是告诉工作线程何时可以继续工作。每当工作线程到达应该睡眠的点时,它就会这样做:

stick.wait();

当视图线程完成onDraw工作时,它会调用:

stick.notify();

请注意视图线程拥有对象上的监视器的要求。在您的情况下,使用小型同步块执行此操作应该非常简单:

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

在这些方法上查询java.lang.Object的javadoc(以及notifyAll,以防万一);他们的写得非常好。

答案 1 :(得分:2)

如果你想要一个更高级别的concurreny API(像Barriers这样的东西),你可以尝试java 5并发API的后端,它适用于java 1.3及更高版本,并且可以在Android上运行。像Object.wait / notify这样的东西可以工作,但它们可能有点简洁。

Backport-util-concurrent