使用 Java AtomicInteger 解决 int 变量运算的原子性问题。
请使用编程案例解决 线程原子性 问题。
public class Test {
static AtomicInteger sum = new AtomicInteger();
public static void main(String[] args) throws InterruptedException {
System.out.println("嗨客网(www.haicoder.net)\n");
Thread t1 = new Thread("Thread01"){
@Override
public void run() {
for (int i = 1; i <= 5000; i++) {
sum.incrementAndGet();
}
}
};
Thread t2 = new Thread("Thread02"){
@Override
public void run() {
for (int i = 1; i <= 5000; i++) {
sum.incrementAndGet();
}
}
};
t1.start();
t2.start();
t1.join(); // 确保线程 t1 运行完毕,再执行主线程
t2.join(); // 确保线程 t2 运行完毕,再执行主线程
System.out.println("计算结果:" + sum);
}
}
运行结果如下图:
以上案例发现,两个线程都进行自增 5000 次之后,结果等于 10000 ,此处可以发现多线程的原子性安全问题已经解决了。