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#
推荐阅读
-
孙友才|宁夏税务上半年为全区出口型企业办理出口退(免)税5亿多
-
[查尔斯王子]戴安娜最后的电话,成王子们的永生遗憾,查尔斯把戴妃当空气!
-
-
-
文娱马后炮王者荣耀S19弈星玩法技巧,王者荣耀S19弈星怎么玩
-
『走心不愚人』盘点互联网公司2020年愚人节作出的神操作
-
-
-
-
-
久期财经|湖州城投拟发行(上限)3亿美元高级无抵押债券
-
-
拳击时空|著名导演刘信达提醒李荣浩:感觉你在杨丞琳心里还不如狗
-
【港股挖掘机】澳能建设(01183)4月16日12.7万港元回购10.2万股
-
假设把贪官们送到西北的沙漠种树,每种活100棵,减刑1月(或1年),为党和人民服务啊,这样可行吗
-
王源|王源载张雪迎骑车路透,还有录音室侧拍花絮照,影视音乐双双拿下
-
英雄联盟|“最高伤害秘诀”,JKL对赛娜有3个独特理解,对线细节最难学
-
战甲装研菌|美军再出丑闻!假海豹突击队骗取退伍军人事务部30万美元
-
#左手时尚右手家庭#其实有四个目的,你身边有吗,职场上经常将“谢谢”挂在嘴边的人
-