-
CAS(Compare And Swap)
-
什么是原子操作?如何实现原子操作
-
CAS的原理:利用了现代处理器都支持的CAS指令,循环这个指令,直到成功为止
利用现代处理器都支持CAS,指令级别保证这是一个原子操作
三个运算符:一个内存地址V,一个期望值A,一个新值B
基本思路:如果地址V上的值和期望的值A相等,就给这个地址赋给一个新值B;如果期望值不是A,不做任何操作。
在一个循环(死循环,自旋)里不断的进行CAS操作 -
CAS的问题
ABA问题:A--->B--->A 版本号:A1--->B2--->A3
开销问题:CAS操作长期不成功,CPU不断的循环
只能保证一个共享变量的原子操作,如果有保证多个共享变量的需求,实现方法是将两个变量封装成一个对象
-
-
Synchronized是基于阻塞的锁机制
- 被阻塞的线程优先级很高
- 拿到锁的线程一直不释放锁怎么办
- 大量线程竞争热点资源,会消耗CPU,同时会带来死锁或其他安全问题
-
原子操作类的使用
- 原子更新基本类型类:AtomicBoolean,AtomicInteger,AtomicLong
- 原子更新数组类:AtomicIntegerArray,AtomicLongArray,AtomicReferenceArray
- 原子更新引用类:AtomicReference,AtomicMarkableReference,AtomicStampedReference
- 原子更新字段类:AtomicRerenceFieldUpdater,AtomicIntegerFieldUpdater,AtomicLongFiedUpdater
-
AtomicMarkableReference和AtomicStampleReference解决ABA问题
AtomicMarkableReference boolean有没有动过
AtomicStampedReference 动过几次
网友评论