Java - 等待 Runnable 完成

标签 java android multithreading

在我的应用程序中,我在后台线程上运行了以下代码:

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 完成执行后继续。有人告诉我上面的代码应该处理这个问题,但有两件事我不明白:

  1. 如果后台线程获取了 myRunnable 的锁,那么 myRunnable 是否应该在它能够调用 notify() 之前阻塞?

  2. 我怎么知道 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/

相关文章:

java - 如果参数不满足则重新启动while循环

multithreading - 为什么 Google App Engine 只支持单线程执行?

c++ - 即使使用另一个线程,启动 while 循环也会卡住程序

java - JSONObject 中的 JSONObject

android - 使用 fragment 的动态方式

java - 按钮不打开新 Activity

java - 如何避免线程中出现 HeadlessException?

java - 使我的游戏成为带有图片的 jar

java - 远程服务器中的 DatabaseChangeRegistration

Java 绘制形状错误