定义一个静态变量,当两个线程都对该变量进行自增运算,计算结果小于实际值,这种情况称为原子性问题。
请使用编程案例实现线程原子性问题。
public class Test {
private static int sum = 0;
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 = 0; i <= 5000; i++) {
sum++;
}
}
};
Thread t2 = new Thread("Thread02"){
@Override
public void run() {
for (int i = 0; i <= 5000; i++) {
sum++;
}
}
};
t1.start();
t2.start();
t1.join(); // 确保线程 t1 运行完毕,再执行主线程
t2.join(); // 确保线程 t2 运行完毕,再执行主线程
System.out.println("计算结果:" + sum);
}
}
运行结果如下图:
以上案例发现,两个线程都进行自增 5000 次之后,结果却小于 10000 ,此处可以发现多线程存在原子性的安全问题。