ReentrantLock显式的获得、释放锁 , synchronized隐式获得释放锁;synchronized不需要我们手动解锁 , 而ReentrantLock需要自己在finally中调用unlock()方法手动解锁 。 ReentrantLock可响应中断、可轮回 ,, 为处理锁的不可用性提供了更高的灵活性 , synchronized是不可以响应中断的;ReentrantLock是API级别的 , synchronized是JVM级别的;ReentrantLock可以实现公平锁 , 而synchronized释放锁后 , 线程竞争无序 , 可能导致线程饥饿(先到的线程一直得不到锁); ReentrantLock通过Condition可以绑定多个条件;底层实现不一样 ,synchronized是同步阻塞 , 使用的是悲观并发策略 , lock是同步非阻塞 , 采用的是乐观并发策略;Lock是一个接口 , 而synchronized是Java中的关键字 , synchronized是内置的语言实现;synchronized在发生异常时 , 会自动释放线程占有的锁 , 因此不会导致死锁现象发生;而Lock在发生异常时 , 如果没有主动通过unLock()去释放锁 , 则很可能造成死锁现象 , 因此使用Lock时需要在finally块中释放锁; 通过Lock可以知道有没有成功获取锁 , 而synchronized无法得知获得锁情况;Lock可以提高多个线程进行读操作的效率 , 既就是实现读写锁等 。 通过以上对比 , ReentrantLock可能更加灵活一些 , 但是从性能考虑 , JDK1.6以后对synchronized做了很多优化锁 , 实际中还是提倡synchronized来进行同步 。
下一节分享虚拟机对synchronized的锁优化 。
内容来源于《深入理解Java虚拟机》第十三章13.2节内容 。
#程序员##JVM#
推荐阅读
-
-
-
GameRes游资网|《守望先锋》成长的四年,简析其塑造玩法策略性的努力
-
辞远防务观察|「图书推荐」张宏明:《大国经略非洲研究》
-
【上观新闻】人民币未来长这样?央行数字货币的三个情景猜想
-
-
澎湃新闻|百年来首次!澳大利亚动用军队封锁两州边界
-
比尔·盖茨|潘多拉魔盒被打开!中国未来将不止突破光刻机,比尔盖茨是明白人
-
-
新华网|截至8月3日24时新疆(含兵团)新型冠状病毒肺炎疫情最新情况
-
求职|猫巫先生十二星座周运2022年6.13-6.19:感到迷茫,疗愈情绪
-
紫菜|小孩都馋哭了!舌尖跳舞的夹心海苔!一咬“咔嗞”脆响
-
没长|长寿花没长花苞,给它用3上个“小技巧”,花苞长满枝头
-
历史边角|符合鲁能气质的几条大鱼,范围不断缩小,谁才是李霄鹏的真命天子
-
-
-
|国务院任免国家工作人员,任命庄少勤为自然资源部副部长
-
-
自动驾驶|复刻“五月花”号历史航程!AI无人驾驶船只成功横渡大西洋
-
诺亚方正 3句话说出了功能,智还软件?老司机用1句话说出了本质