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.4k
1 个回答

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题