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#
推荐阅读
-
-
汽扯扒谈|“平民超跑”本田全新飞度官图发布,8月正式上市,1.5L四缸动力
-
-
-
-
百车一荐动力超200匹,比思域和雷凌更帅气,全新伊兰特下半年上市
-
成本1.8亿,票房42万,2024年清明档第一票房惨案,19位明星出演
-
qq空间怎么查看谁特别关心我 qq空间特别关心查询
-
ios13.5@iOS13.5 GM 版来袭,你会升级吗?
-
-
-
宇之轩|浅蓝色的牛仔吊带裙,更显名媛气质啊,夏日甜心的穿搭
-
跑步■长跑,高手可以一直坚持下去的秘诀只有一个:放弃思考!
-
-
朱丽倩:带亿万嫁妆嫁刘德华,46岁为他高龄产女,如今怎样了?
-
阿里扎|保送湖人?阿里扎欲归队被拒绝,本来真有机会黑八
-
妻子是“扶弟魔”,但我没有离婚,用一个方法让岳父母家从此消停
-
Sophia爱美补习社|如何用「差异化竞争」思维脱颖而出?,再怎么努力也成不了白瘦幼?美貌赛场上
-
杨钰莹,明星照片,实力唱将|49岁“甜歌王后”杨钰莹,身材发福脸变样,商演现场十分冷淡?
-