ABA问题
1.AtomicInteger不能解决ABA问题
主线程仅能判断出共享变量的值与最初值 A 是否相同,不能感知到这种从 A 改为 B 又 改回 A 的情况。
/**
* ABA问题复现
*/
@Test
public void test_ABAQuestion() {
AtomicInteger ai = new AtomicInteger(10);
//线程1睡眠1秒后修改ai变量,10->20->10
Thread t1 = new Thread(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
ai.compareAndSet(10, 20);
ai.compareAndSet(20, 10);
}, "t1");
t1.start();
//线程2先获取ai的值,3秒后再获取ai的值
Thread t2 = new Thread(() -> {
int prev = ai.get();
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
//虽然t1线程修改过ai的值&