我在 winterbe.com 上遇到了以下示例,该示例演示了原子变量的使用。
// From http://winterbe.com/posts/2015/05/22/java8-concurrency-tutorial-atomic-concurrent-map-examples/
public class Test_AtomicInteger {
public static void main(String[] args) {
AtomicInteger atomicInt = new AtomicInteger(0);
ExecutorService executor = Executors.newFixedThreadPool(2);
IntStream.range(0, 1000)
.forEach(i -> {
Runnable task = () ->
atomicInt.updateAndGet(n -> n + 2);
executor.submit(task);
});
executor.shutdownNow();
System.out.println(atomicInt.get()); // => 2000
}
}
了解如何从线程安全场景推导出预期值 2000。但是,当我尝试在 Eclipse IDE 上执行它时,每次运行它都会给出不同的输出值。想看看是否有人知道它为什么会这样。非常感谢。