我想在几个线程(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'语句是从静态变量,非静态变量还是通过调用方法获取引用是不相关)。 –