2013-05-10 76 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中出現其他一些問題。

相關問題