Synchronized与Lock有什么区别

1.原始构成

synchronized是关键字属于JVM层面

  monitorenter(底层通过monitor对象来完成,其实wait、notify等方法也依赖于 monitor对象,只有在同步代码块和同步方法中才能调wait/notify等方法)

  monitorexit

Lock是具体类(JUC.locks.Lock)是api层面的锁

2.使用方法

  synchronized不需要用户去手动释放锁,当synchronized代码执行完后系统会自动让线程释放对锁的占用

  ReentrantLock则需要用户去手动释放锁若没有主动释放锁,就有可能导致出现死锁现象

3.等待是否可以中断

  synchronized不可中断,除非抛出异常或者正常运行完成

  ReentrantLock可中断 1.设置超时方法tryLock(long timeout,TimeUnit unit)

4.加锁是否公平

  syn非公平锁

  ReentrantLock默认非公平,构造方法可以传入boolean值 try为公平

5.锁绑定多个条件Condition

  syn没有

  Re用来实现分组唤醒需要唤醒的线程,可以精确唤醒,而不是像syn要么随机唤醒要么全唤醒

猜你喜欢

转载自www.cnblogs.com/ergePython/p/12393350.html