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#
推荐阅读
-
-
网购的多肉,上盆前做对“4件”事情,更容易“服盆”长得快
-
紧身|身材丰满的紧身打底裤美女,穿出女神的姿态,真迷人!
-
英文|老外这下高兴了!国产热游《鬼谷八荒》新增英语选项
-
二氧化碳|银行的灭火器里,装的可能是普通人没见过的“干水”
-
分享健康|如何寻找胃癌这个刺客?胡群峰教授教你四个办法识别早期胃癌!
-
五大城市群, 将崛起十个超级城市, 你家乡在里面吗
-
罗云熙|罗云熙是第一个因为太瘦被群嘲的男演员,千万别再瘦下去了
-
琉璃美人煞|改名了,定档了!差点被弃的《琉璃美人煞》胜在“质感”
-
亲妮小菇凉|越嫌弃你的三大星座,别总是太过热情,自找没趣!,越主动
-
如何引导孩子与他人友好相处,如何引导孩子与他人友好相处教案
-
西游记|孙悟空一直叫猪八戒呆子,为何真假美猴王之后,却改叫八戒了
-
-
高铁|中国高铁成为“中国荣誉”中国汽车的痛却是挥之不去!
-
-
-
-
win10下安装国产操作系统deepin/UOS,双系统开机可自由切换
-
-