全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

Synchronized由什么样的缺陷? Java Lock是怎么弥补这些缺陷的

发布时间:2022-09-08 17:10:00
发布人:syq

  synchronized的缺陷

  1.效率低:锁的释放情况少,只有代码执行完毕或者异常结束才会释放锁;试图获取锁的时候不能设定超时,不能中断一个正在使用锁的线程,相对而言,Lock可以中断和设置超时。

Synchronized由什么样的缺陷

  2.不够灵活:加锁和释放的时机单一,每个锁仅有一个单一的条件(某个对象),相对而言,读写锁更加灵活

  3.无法知道是否成功获得锁,相对而言,Lock可以拿到状态

  Lock解决相应问题

  Lock类这里不做过多解释,主要看里面的4个方法:

  lock(): 加锁 unlock(): 解锁 tryLock(): 尝试获取锁,返回一个boolean值 tryLock(long,TimeUtil): 尝试获取锁,可以设置超时

  Synchronized只有锁只与一个条件(是否获取锁)相关联,不灵活,后来Condition与Lock的结合解决了这个问题。

  多线程竞争一个锁时,其余未得到锁的线程只能不停的尝试获得锁,而不能中断。高并发的情况下会导致性能下降。ReentrantLock的lockInterruptibly()方法可以优先考虑响应中断。 一个线程等待时间过长,它可以中断自己,然后ReentrantLock响应这个中断,不再让这个线程继续等待。有了这个机制,使用ReentrantLock时就不会像synchronized那样产生死锁了。

相关文章

scrum敏捷软件开发是什么?

scrum敏捷软件开发是什么?

2023-10-14
敏捷BI和传统BI有什么区别?

敏捷BI和传统BI有什么区别?

2023-10-14
敏捷开发实行中各岗位职能是什么?

敏捷开发实行中各岗位职能是什么?

2023-10-14
敏捷开发在实际应用中有什么注意点?

敏捷开发在实际应用中有什么注意点?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取