CAS

March 16, 2023 · View on GitHub

Unsafe

java 中的cas操作的都是基于Unsafe实现的,Unsafe使用JNI调用C++方法,提现平台相关的实现

Unsafe demo

// 获取一个 Unsafe实例
Field field = Unsafe.class.getDeclaredField("theUnsafe");
field.setAccessible(true);
Unsafe unsafe = (Unsafe) field.get(null);
System.out.println(unsafe);

cas 优点缺点

  • cas 使用循序,减少了CPU上下文的切换,但是它不会让出CPU资源,如果循环时间过长,独占CPU,CPU不能参与其他计算

实现

基于CPU的cmpxchg指令

Java原子类

atomic.png