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());
}
}
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这个本来就是线程安全的,就是操作数据不会出现数据没有及时更新的情况。