AtomicInteger调用过程以及保持原子性的原因
代码示例
private static AtomicInteger m = new AtomicInteger(0);
public static void main(String[] arg) throws InterruptedException {
Thread[] threads = new Thread[100];
CountDownLatch latch = new CountDownLatch(threads.length);
long start = System.currentTimeMillis();
for (int i = 0;i < threads.length;i ++){
threads[i] = new Thread(() -> {
for (int j = 0;j < 10000; j ++){
m.incrementAndGet();
}
latch.countDown();
});
}
Arrays.stream(threads).forEach(x -> x.start());
latch.await();
long end = System.currentTimeMillis();
System.out.println(end - start);
System.out.println(m);
}
m.incrementAndGet()调用过程
atomicinteger—>incrementandget---->getandaddint---->compareandswapint(c语言的指令)