千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

当前位置:首页  >  技术干货  > Java有了synchronized,为什么还要提供Lock?

Java有了synchronized,为什么还要提供Lock?

来源:千锋教育
发布人:xqq
时间: 2023-10-14 15:29:31 1697268571

1、可中断性

Lock接口提供了可中断的获取锁的方法,例如lockInterruptibly()。当一个线程在等待锁的过程中,可以被其他线程中断,这样可以更灵活地处理线程的中断请求。而synchronized关键字在等待锁时,线程是不可中断的,只有等待获取锁的线程结束或者获取锁后释放锁,其他线程才能参与竞争。

2、超时获取

Lock接口允许线程在指定的时间范围内尝试获取锁,如果在指定时间内未能成功获取锁,线程可以根据实际情况做出相应处理。这个特性在一些场景下非常有用,而synchronized关键字没有直接支持这种超时获取的功能。

3、公平性

Lock接口可以实现公平锁,即按照线程等待的顺序来获取锁,避免某些线程长时间等待而导致饥饿的问题。而synchronized关键字并没有提供公平锁的机制,导致某些线程可能一直无法获取到锁。

4、多条件变量

Lock接口允许创建多个Condition对象,每个Condition对象可以管理一个线程等待队列,并且可以通过await()和signal()等方法来控制线程的等待和唤醒。这在复杂的线程同步场景中非常有用。而synchronized关键字只支持一个内置条件变量,使用起来相对有限。

5、可重入性

Lock接口支持可重入锁,即同一个线程可以多次获取同一个锁,而不会被阻塞。这对于递归调用或者某些特殊情况下非常有用。synchronized关键字也是可重入的,但在某些情况下可能会引起死锁问题。

6、性能和扩展性

在一些高并发的场景中,Lock接口相比synchronized关键字在性能上可能有一定的优势,尤其是对于细粒度的锁控制。而且,Java提供的Lock接口有多个实现类,例如ReentrantLock、StampedLock等,开发者可以根据具体的需求选择合适的实现,而synchronized关键字只有一种内置锁。

延伸阅读

synchronized是什么

synchronized是Java中的一个关键字,用于实现线程的同步和互斥。它可以应用在方法、代码块或静态方法上,用于确保在多线程环境下共享资源的安全访问。当一个方法或代码块被synchronized修饰时,它就变成了一个临界区(critical section),同一时刻只有一个线程可以进入这个临界区执行代码,其他线程需要等待。这样可以避免多个线程同时访问共享资源而导致的数据不一致或竞态条件问题。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT