Java:请问这段代码为什么不是线程安全的?

public class Counter {
    public volatile static AtomicInteger NUMBER = new AtomicInteger(0);
}
public class Client {
    public static void main(String[] args) {
        for (int i = 0; i < 1000; i++) { // 同时启动 1000 个线程对 NUMBER 进行累加
            new Thread(new Runnable() {
                @Override
                public void run() {
                    Counter.NUMBER.getAndIncrement();
                }
            }).start();
        }
        int number = Counter.NUMBER.get();
        System.out.println(number);
    }
}

通过volatile保证可见性,通过AtomicInteger保证自增原子性,为何最后结果NUMBER仍不是1000?

阅读 1.5k
1 个回答

因为你没有等你的线程运行完。

推荐问题