Synchronized与Lock的区别

一 、原始组成

  • synchronized是关键字属于JVM层面
  • monitorenter底层通过monitor对象来完成,其实wait/notify等方法也依赖于monitor对象,只有在同步快或方法中才能调用
  • lock是具体类 (import java.util.concurrent.locks.Lock;) 是api层面的锁

 

二、使用方法

  • synchronized不需要用户手动释放锁,当synchronized代码执行完毕后系统会自动让线程释放对锁的占用
  • ReentrantLock则需要用户去手动释放锁,若没有主动释放会导致死锁

 

三、等待是否可中断

  • synchronized不可中断,除非抛出异常或者正常运行完成
  • ReentrantLock可中断 trylock  lockInterruptibly放在代码块中调用interrupt方法中断

 

四、加锁是否公平

  • synchronized是 非公平锁
  • ReentrantLock俩者都可以,构造方法true为公平锁  默认非公平

 

五、绑定多个条件Condition

  • synchronized没有   随机唤醒一个或者都唤醒
  • ReentrantLock用来实现分组唤醒需要唤醒的线程们,可以精确唤醒

 

volatile-CAS-atomicInteger-BlockQueue-线程交互-原子引用

你可能感兴趣的:(并发,Java~基础篇)