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());
}}
5 回答
牛魔王的故事
TA贡献1830条经验 获得超3个赞
结果不是1000,是因为你的线程出现了共享数据,就是说在一个时间断上一个线程没结束,下一个线程就来了,也就是用了同一个值,也就是常说的线程不安全问题,java中的解决方案是用同步代码块或是ThreadLocal
换句话就是在这1000次循环中结果是0的执行了N次,结果是9的执行了N次,这样到循环了1000次时,结果肯定不是1000了
添加回答
举报
0/150
提交
取消