线程安全计数器 - 原子整数不起作用
Thread safe counter- Atomic Integer not working
我有(比如说)10 个线程。所有线程都递增计数器,并且将记录相同的内容。
计数器是一个原子整数,但有时我会在计数器中得到重复的值。
我期望的是 - 计数器是线程安全的,允许计数器一次由一个唯一的线程递增,一次由一个唯一的线程读取。我应该做些什么不同的事情?!谢谢
Class A{
public void AM(){
ExecutorService executor = Executors.newFixedThreadPool(threadPoolCount);
List tasks = new ArrayList(tasklist);
for(loop tasks) {
Future<t> futureObjects = executor.invokeAll(task);
}
}
}
Class B implements Callable{
public Object call(){
//call method log
}
}
Class C {
static AtomicInteger counter = new AtomicInteger(1);
public void log(){
log("counter: "+counter)
counter.getAndIncrement();
}
}
使用下面给出的代码,您将不会在日志中看到重复的值。您正在尝试在更新之前进行打印,这可能会导致多个线程打印相同的值:
Class C {
static AtomicInteger counter = new AtomicInteger(1);
public void log(){
int count = counter.getAndIncrement();
log("counter: "+count)
}
}
我有(比如说)10 个线程。所有线程都递增计数器,并且将记录相同的内容。 计数器是一个原子整数,但有时我会在计数器中得到重复的值。 我期望的是 - 计数器是线程安全的,允许计数器一次由一个唯一的线程递增,一次由一个唯一的线程读取。我应该做些什么不同的事情?!谢谢
Class A{
public void AM(){
ExecutorService executor = Executors.newFixedThreadPool(threadPoolCount);
List tasks = new ArrayList(tasklist);
for(loop tasks) {
Future<t> futureObjects = executor.invokeAll(task);
}
}
}
Class B implements Callable{
public Object call(){
//call method log
}
}
Class C {
static AtomicInteger counter = new AtomicInteger(1);
public void log(){
log("counter: "+counter)
counter.getAndIncrement();
}
}
使用下面给出的代码,您将不会在日志中看到重复的值。您正在尝试在更新之前进行打印,这可能会导致多个线程打印相同的值:
Class C {
static AtomicInteger counter = new AtomicInteger(1);
public void log(){
int count = counter.getAndIncrement();
log("counter: "+count)
}
}