在另一个线程中等待事件发生,使某个线程休眠

31

我在一个Android应用程序中有两个线程,一个是视图线程,另一个是工作线程。我的目标是,在视图线程终止处理onDraw方法之前,使工作线程进入睡眠状态。

我该如何实现这一目标?是否有等待信号或其他方法?

2个回答

41

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

stick.wait();

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

stick.notify();

请注意需要视图线程拥有对象的监视器的要求。在您的情况下,可以通过一个小的同步块来强制实施:

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

请参考java.lang.Object的javadoc文档,查看这些方法的详细说明(包括notifyAll方法,以防万一)。它们写得非常好。


2
如果您需要更高级别的并发API(例如屏障),可以尝试Java 5并发API的后移版本,它适用于Java 1.3及以上版本,并且可能适用于Android。虽然Object.wait/notify等方法也可以使用,但它们可能有点简洁。
请参考:Backport-util-concurrent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接