【发布时间】:2017-10-26 15:20:57
【问题描述】:
我的期望是程序会返回输出“1000”。
但是,每次程序执行时都会出现不同的输出。
Counter 类的 increment() 方法已同步。只有这样才能避免相互竞争的读数吗?
让它计算 1000 个增量的正确方法是什么?
package app;
public class Counter {
private Integer value;
public Counter(int initialValue) {
value = initialValue;
}
public synchronized void increment() {
value = value + 1;
}
public int getValue() {
return value;
}
}
package app;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
Counter contador = new Counter(0);
ExecutorService executor = Executors.newFixedThreadPool(10);
for(int i = 0; i < 1000; i++) {
executor.submit(() -> {
contador.increment();
});
}
System.out.println(contador.getValue());
}
}
【问题讨论】:
-
这个问题没有直接针对 AtomicInteger 类。
标签: java concurrency parallel-processing executorservice synchronized