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#
推荐阅读
-
-
-
-
橙果妈妈|却是爱的伤痕累累,豆瓣9.0《隐秘的角落》大结局:人性恶的背后
-
三国两晋南北朝|关羽和张飞,一个卖枣一个杀猪,他们真的是穷苦出身吗
-
-
-
-
「皇家马德里」齐达内真急了!皇马8000万先生要投奔死敌 最坏结果免费走人
-
「」新手机没有这三个功能建议放弃,尤其是最后一个,太吃亏
-
-
李一男|任正非的“干儿子”,华为“叛将”李一男为何不趁机反击?
-
6月1日起,同一车主名下同号牌种类的非营运车辆可互换号牌号码
-
电影工厂 李晨立马“行动”,兄弟情真假很明显,郑恺在跑男群说要退出节目
-
【急救】宁夏连续18天零新增!宁夏病情最危重的米奶奶结束康复期隔离回家!
-
同比增长|复星医药换帅 公司前三季度净利同比增长超20%
-
搞机么|X50 Pro+有看不完的精美照片,粤剧有唱不完的悲欢离合,vivo
-
-
C罗|工作中出现的失误不外乎这几种,管理者要特别注意
-
锦衣之下■《锦衣之下》今夏高甜陪伴,陆绎照单全收,谢霄都要哭了