2012-05-10 49 views
1

我有一個線程A,它在while(running)循環內執行定期操作。然後我有另一個線程,B,它偵聽用戶輸入。當用戶按下按鈕時,線程B會產生一個新線程來執行任務(我們稱之爲線程C的一個實例)。這項任務涉及通過互聯網發送信息,可能需要長達20秒。一次可以有多個C活動實例。從外部產卵線程檢測另一個線程的實例

我遇到的問題是這樣的。我想線程A只運行它的代碼,如果沒有線程'C'目前處於活動狀態。爲了更清楚,線程A看起來是這樣的:

class ThreadA extends Thread{ 

     public void run(){ 
      while(running){ 
       performAction(); 
       Thread.sleep(1000); 
      } 
     } 
} 

如果檢測到的C一個實例,那麼顯然我不希望performAction()被調用。如果線程當前正在執行performAction(),那麼我想在當前的進程中停止執行。

我不知道如何着手,因爲我不知道我怎麼會從線程A

+1

This [answer](http://stackoverflow.com/a/1323480/187492)顯示如何遍歷正在運行的線程列表。 – Martin

回答

2

使用java.lang.ThreadGroup內獲得產生的線程的參考。通過用一個靜態的ThreadGroup構造ThreadC的所有實例,你可以維護ThreadC的所有實例,並使用ThreadGroup#activeCount()來計算活動的實例。只需在ThreadA中添加一個條件,只在調用activeCount()時public static ThreadC.threadGroup字段返回0時才調用performAction()。

+0

這看起來像我想要的!謝謝 –