线程同步之synchronized volatile ReentrantLock CAS总结
synchronized
- 同步锁本身控制放行或者不放行
- 修饰的静态方法做用于这个类的全部对象
- 修饰的类做用于这个类的全部对象
volatile
- 不须要加锁,修改以后当即内存可见,直接存储在内存不须要进入到cpu
- 变量修饰符,仅仅能够用户变量,synchronized能够做用于变量和方法
- 标记的变量不会被编译器优化
ReentrantLock
- 多重锁,赞成个线程能够调用屡次锁造成多层锁,同一个线程进入一次,锁的计数器都自增1
- synchronized 是jvm层面实现的,reentrantlock是API层面的实现
- synchronized比较简洁,Reentrantlock须要手动处理
CAS(Compare-and-Swap)
- CAS指令须要3个操做数,内存地址,旧的预期,新值
- 存在ABA问题 AtomicStampedReference来解决ABA问题
- 自旋CAS(不成功,就一直循环执行,直到成功==)若是长时间不成功,会给CPU带来很是大的执行开
欢迎关注本站公众号,获取更多信息