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…有人能解释一下吗?
发布于 2014-12-09 06:36:15
在打印结果之前,不需要等待线程返回。因此,您无法保证所有增量操作都发生在调用System.out.println()之前。
发布于 2014-12-09 06:39:09
当您的print语句在所有线程完成或甚至启动之前执行时,您将得到不同的计数。
您需要调用所有线程上的联接,以使主线程等待它们完成。
// 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());https://stackoverflow.com/questions/27372781
复制相似问题