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

问题描述 投票:27回答:2

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

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

java android multithreading
2个回答
38
投票

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

stick.wait();

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

stick.notify();

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

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

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


2
投票

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

Backport-util-concurrent

© www.soinside.com 2019 - 2024. All rights reserved.