下面的代码为什么输出不是1000?

public class ThreadTest {

public static void main(String[] args) {
    final AtomicInteger atomicInteger = new AtomicInteger(0);

    for (int i = 0; i < 1000; i++) {
        new Thread(new Runnable() {
            @Override
            public void run() {
                atomicInteger.getAndIncrement();
            }
        }).start();
    }

    System.out.println(atomicInteger.toString());
}

}


千巷猫影
浏览 604回答 5
5回答

慕标5832272

System.out.println(atomicInteger.toString());运行到这里的时候,线程未必执行完毕了。

开满天机

for (int i = 0; i < 1000; i++)这个条件就是小于1000最大回事999

牛魔王的故事

结果不是1000,是因为你的线程出现了共享数据,就是说在一个时间断上一个线程没结束,下一个线程就来了,也就是用了同一个值,也就是常说的线程不安全问题,java中的解决方案是用同步代码块或是ThreadLocal换句话就是在这1000次循环中结果是0的执行了N次,结果是9的执行了N次,这样到循环了1000次时,结果肯定不是1000了

胡子哥哥

运行结果是1000,代码没有错误啊。再者AtomicInteger这个本来就是线程安全的,就是操作数据不会出现数据没有及时更新的情况。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java