import java.util.concurrent.atomic.AtomicInteger;
public class Volatiletest extends Thread {
private static AtomicInteger atomic = new AtomicInteger(0);
public void run() {
atomic.getAndIncrement();
}
public static void main(String[] args) {
Thread threads[] = new Thread[100];
for (int i = 0; i < threads.length; i++) {
threads[i] = new Volatiletest();
}
for (int i = 0; i < threads.length; i++) {
threads[i].start();
}
System.out.println(atomic.get());
}
}
代码如上。 我认为输出是100,但输出是随机的,如99,98,100 ...... 有人可以解释一下吗?
答案 0 :(得分:4)
在打印结果之前,您没有等待线程返回。因此,您无法保证在调用System.out.println()
之前所有增量操作都已发生。
答案 1 :(得分:2)
在所有线程完成甚至开始之前,您的print语句正在执行,您的计数会有所不同。
你需要在所有线程上调用join来使主线程等到它们完成为止。
// Spawn all threads
for (int i = 0; i < threads.length; i++) {
threads[i].start();
}
// Wait for each thread to finish
for (int i = 0; i < threads.length; i++) {
threads[i].join();
}
System.out.println(atomic.get());