JUC:CAS原理
在多核状态下:某个线程执行到带lock的指令的时候,cpu会让总线锁住,知道把这个指令执行完毕,然后在开启总线,以保证多个线程的原子性;
CAS和volatile的相关工具类【JUC】:
-
原子整数:
-
AtomicBoolean
-
AtomicInteger
-
AtomicLong
-
底层都是CAS:compareAndSet();
while(true){ int pre = i.get(); int next = pre - 10; // 操作 if(i.compareAndSet(pre, next)){ break; } }
-
-
原子引用类型:
- AtomicReference:只能判断是否改变,不能判断是否发生循环变换;
- AtomicMarkableReference:在AtomicReference基础上,增加一个版本号,修改过就加1;
- AtomicStampedReference:有时候只关心,是否修改,所以版本号使用一个boolean值;
-
原子数组:
- AtomicIntegerArray
- AtomicLongArray
- AtomicReferenceArray
-
字段更新器:针对对象成员进行原子操作,只能配合volatile操作;
- AtomicReferenceFieldUpdater
- AtomicIntegerFieldUpdater
- AtomicLongFieldUpdate;
-
原子累加器:
- ···
-
Unsafe:提供了底层操作内存和线程的方法,只能通过反射获取;

浙公网安备 33010602011771号