2015-04-02 88 views
0

我正在嘗試使用任意數量的工作線程來處理arraylist。我想跟蹤每個工作線程處理了多少項目,並在特定數目後終止它們。會在工作線程類中聲明一個變量counter並檢查該計數器是否有效?線程中的訪問變量

. 
. 
Thread t = new Thread(); 
t.start 
while(true){ 
if(t.counter >= 5){ 
    return; 
} 
} 
. 
. 

class Thread{ 
    int counter = 0; 
    public void run { 
     while(true){ 
     do something.... 
     counter++; 
     } 
    } 
} 
+0

Busy-waiting('while(true){...}')是一個非常糟糕的主意,因爲這將佔用100%或儘可能多的一個CPU,從而降低了工作線程的可用性。 – 2015-04-02 03:26:09

+0

你還需要使'counter'變量'volatile'如下:'volatile int counter = 0;'。否則,不能保證你的主線程會在變量counter中看到變化。 – 2015-04-02 03:26:58

+0

感謝反饋傢伙,我決定改變我的實現,以傳遞工作線程應該在工作線程的構造函數中作爲參數迭代的迭代值,以便不再需要檢查。 – bakalolo 2015-04-02 04:43:53

回答

0

這是我會怎麼做:

int counter = 0; 

Thread t = new Thread(new Runnable(){ 
    public void run { 
     while(true){ 
      doSomething... 
      counter++ 
     } 
    } 

}); 
t.start(); 

while(true){ 
    if(counter >= 5){ 
     return; 
    } 
} 

作爲一個回答你的問題。我不知道有什麼方法來訪問運行的另一個線程的。可能有,但上面的代碼會很好的工作。