在我的应用程序中,我在后台线程上运行了以下代码:
MyRunnable myRunnable = new MyRunnable();
runOnUiThread(myRunnable);
synchronized (myRunnable) {
myRunnable.wait();
}
//rest of my code
MyRunnable 看起来像这样:
public class MyRunnable implements Runnable {
public void run() {
//do some tasks
synchronized (this) {
this.notify();
}
}
}
我希望后台线程在 myRunnable 完成执行后继续。有人告诉我上面的代码应该处理这个问题,但有两件事我不明白:
如果后台线程获取了 myRunnable 的锁,那么 myRunnable 是否应该在它能够调用 notify() 之前阻塞?
我怎么知道 notify() 在 wait() 之前没有被调用?
最佳答案
您也可以使用 JDK 的标准 RunnableFuture像这样:
RunnableFuture<Void> task = new FutureTask<>(runnable, null);
runOnUiThread(task);
try {
task.get(); // this will block until Runnable completes
} catch (InterruptedException | ExecutionException e) {
// handle exception
}
关于Java - 等待 Runnable 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34459392/