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

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()之前?
  • 我怎么知道在wait()之前没有调用notify()?
  • 最佳答案

  • myRunnable.wait()将释放myRunnable的锁定,并等待通知
  • 我们总是在等待之前添加检查。
    //synchronized wait block
    while(myRunnable.needWait){
        myRunnable.wait();
    }
    
    //synchronized notify block
    this.needWait = false;
    myRunnable.notify();
    
  • 关于Java-等待Runnable完成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34459392/

    10-12 04:11