我想在幾個線程(6)之間同步一個int計數器。以下是我的工人班。我想我的私人領域countertest
同步:Java在執行程序服務池中的線程之間同步數據
public class DbWorker implements Callable {
private final Object lock = new Object();
private int countertest = 0 ;
private boolean IsActive(Integer act)
{
synchronized(lock){
boolean exists = false;
countertest++;
....
System.out.println("countertest IS : " + countertest);
}
return true;
}
public void run() {
....
IsActive(act):
...
}
}
在我的主類我使用for循環和ExecutorService的創建線程。請看下面:
private ExecutorCompletionService<Integer> _objQueue ;
for(int j = 0; j < 6; j++){
_objQueue.submit(new DbWorker("SOME PARAMETER" , _snapshots.get(j) , j) );
}
我countertest變量沒有同步它打印不同的數字(非順序)。我究竟做錯了什麼?
「重複」,國際海事組織,是一個壞的問題,一個不好的答案。不好的,因爲它促進了對象可以是「靜態」或不靜態的想法。 (他們不能:只有_variables_可以是靜態的或不是靜態的。)而且,不好的,因爲它促進了'靜態'在鎖定方面的不同。 (事實並非如此,重要的是,兩個線程不能同時鎖定同一個對象,'synchronized'語句是從靜態變量,非靜態變量還是通過調用方法獲取引用是不相關)。 –