2013-05-10 155 views
0

我正在开发一个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块内有一个返回。

使用此代码,会在第二个线程发生异常时首先得到通知?

+0

你想实现什么? – Blackbelt 2013-05-10 12:26:11

+0

这是我在某处找到的代码,我不知道是否会通知第一个代码。 – VansFannel 2013-05-10 12:28:36

回答

2

如果在第二个线程上发生异常,第一个线程会得到通知吗?

答案是否定的。除非你在catch块明确notify()返回之前,其他线程将不会醒来

+0

感谢您的回答,但是,'synchronized(MyClass.myLock){'?发生异常时,它将从同步块中消失。 – VansFannel 2013-05-10 12:52:03

0

回答是否定的。为了在同一个对象上得到通知,必须是​​。 this可以不同。如果你想让一个对象上的所有线程都通知你,请致电notifyAll()而不是notify()notifyAll()应放在finally区块内。逸岸,尽管回报常是执行finally块

0

notify()应该是finally块,如果你想让它无条件地工作,但你确实应该使用Thread.join()代替wait()内:然后被等待的线程上不必须做任何事情。

0

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

相关问题