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#
推荐阅读
-
「小院食光」红烧猪蹄就该这样做,软烂咸香不油腻,吃起来特别过瘾!
-
全省累计@湖北 新增确诊病例0例湖北新增无症状感染者17例
-
-
『周扒皮看热闹』油耗5.3L,从17.98万跌至8.49万,却仍被忽略,可惜的“日产造”
-
-
-
-
巩俐|巩俐与张艺谋28年前合照,那时巩俐清纯可人笑容甜美!
-
天狼星是夜空中最亮的恒星 肉眼看来,星空中最亮的恒星是
-
易快讯TB荣耀7英寸大屏机型曝光,将支持DCI-P3广色域
-
邓紫棋不在▲可能是最坚硬的玻璃手机!红米Note7正式发布刷新手机质保记录
-
-
冰妹|墨香家男主害怕什么?师尊怕眼泪,羡羡怕家规,那怜怜呢?
-
篮球记者杨克己就像我当年崇拜乔丹一样,纳什回忆与科比做队友:年轻人崇拜科比
-
-
穿衣搭配|《半是蜜糖半是伤》大结局,姐姐们的穿搭你还没学起来?
-
-
女性养生|女性再没钱,3种食物不能少,美容护肤,滋肝明目,延缓肌肤衰老
-
-