首页 > 其他 > 详细

Synchronized与Lock有什么区别

时间:2020-03-02 09:19:56      阅读:98      评论:0      收藏:0      [点我收藏+]

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要么随机唤醒要么全唤醒

Synchronized与Lock有什么区别

原文:https://www.cnblogs.com/ergePython/p/12393350.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!