2012-07-26 22 views
-1

我必須執行2種方法線程:執行具有螺紋完整方法中,一旦方法的執行完成啓動另一個方法

  1. await()
  2. signal()

的條件是完成執行之後的方法await(),那麼只應該調用方法signal()

在我的情況下,應用程序正在關閉。

我在這裏寫的樣本例如:

private final Object lock = new Object(); 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    signal(); 
    try { 
     await(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    System.out.println("Method: after await"); 
} 

public void signal() { 
    synchronized (lock) { 
     System.out.println("Method before "); 
     **lock.notify();** 
     System.out.println("Method await after signal "); 
    } 
} 

public void await() throws InterruptedException { 
    // synchronized (lock) { 


    Thread t = new Thread() { 
     public void run() { 
      System.out.println("Method await before wait "); 
      try { 
       **lock.wait();** 
      } catch (InterruptedException e) { 
       // TODO Auto-generated catch block 
       System.out.println("Method in exception "); 
      } 
      System.out.println("Method await after wait "); 
     } 
    }; 
} 
+0

'請提供解決方案'是不是什麼SO。如果你有一個特定的問題,你不能自己解決,儘管我們很樂意幫助你。 – Keppil 2012-07-26 07:14:59

+0

我喜歡你的評論Keppil,我爲此嘗試了很多,但總是得到InterruptedException異常,我通過創建兩個不同的類來解決這個問題,但是我需要一些關於我在這裏發佈的相同邏輯的幫助,如果你可以幫助解決它的可觀性。謝謝 – dhir 2012-07-26 07:23:16

回答

0

好,有一些問題在這裏:

  • 你永遠不啓動Thread。添加線

    t.start(); 
    

    創建Thread後。

  • wait()未從同步代碼中調用。當試圖執行你的代碼時,這給了我一個IllegalMonitorStateException

  • 您可能想要在signal()之前致電await(),並等待一秒鐘左右,以確保await()首先獲得鎖定。如果沒有,該程序將被阻止。

+0

是的,你是絕對正確的,我想先打電話給await(),然後signal()和我開始線程t.start(),但仍然得到異常 – dhir 2012-07-26 07:44:09

+0

@dhir:我很抱歉,用上面的代碼重現你的錯誤,對我來說工作正常。 – Keppil 2012-07-26 08:22:38

相關問題