线程同步之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带来很是大的执行开
相关文章
相关标签/搜索