1.CAS
2. 原子类的原理
3.原子类的使用
import java.util.concurrent.atomic.AtomicInteger;
public class Test {
public static AtomicInteger atomicInteger = new AtomicInteger();
public static void main(String[] args) throws InterruptedException {
System.out.println(atomicInteger.get());
Thread t1 = new Thread(() -> {
for (int i = 0; i < 5; i++) {
atomicInteger.getAndIncrement();
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 5; i++) {
atomicInteger.getAndAdd(2);
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(atomicInteger.get());
}
}
CAS实现自旋锁
4.ABA问题和解决方案
ABA问题:一个线程把变量的值从A -> B, 又从B -> A, 此时当前线程无法确定变量是否发生变化.
解决方案:使用版本号判断变量是否发生改变,因为版本号只增不减.