线程在完成执行时是否通知另一个连接的线程?

时间:2013-05-10 12:20:38

标签: java android multithreading try-catch

我正在开发一款Android应用。

我有两个主题。第一个必须等​​待第二个。

我在第一个帖子 run方法上有这个代码:

@Override
public void run() {

  synchronized (this.secondThread) {
      this.secondThread.wait();
  }

   [...]
}

第二个帖子

@Override
public void run() {

    synchronized (MyClass.myLock) {

        try {

            // Do something important here

        }
        catch (Exception ex)
        {
            // manage exception
            return;
        }
        finally {
            // do something...
        }
    }

    synchronized (this) {
        this.notify();
    }

    [...]

}

如您所见,在catch区块内有一个返回。

使用此代码,如果第二个线程发生异常,将首先通知线程吗?

4 个答案:

答案 0 :(得分:2)

  如果在第二个上发生异常,

将首先通知线程   线程?

答案是否定的。除非你在返回之前在catch块中明确地 notify(),否则另一个线程不会被唤醒

答案 1 :(得分:0)

答案是否定的。为了获得两者,必须在同一个对象上通知synchronizedthis可能不同。如果您希望等待对象的所有线程通知您,请致电notifyAll()而不是notify()notifyAll()应放在finally块内。事实上,尽管返回了finally块,但总是被执行

答案 2 :(得分:0)

如果你想让它无条件地工作,那么notify()应该在finally块内,但是你应该真的使用Thread.join()而不是wait():那么正在等待的线程就没有了什么都不做。

答案 3 :(得分:0)

答案是否定的。除非你在返回之前在catch块中显式地通知(),否则另一个线程将不会被唤醒,你必须有Al可能的异常,并且在每种情况下都通知你的第一个线程,确保你的第一个线程输入不依赖于第二个线程输出否则你可能会在线程1中解决其他一些问题。