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?
因为你没有等你的线程运行完。