Synchronized锁和Lock锁的区别,简单总结一下

前几天回去复习了一下juc的知识,今天来总结下Synchronized锁和Lock锁的区别

主要区别:

1、语法和使用方式

      Synchronized是 Java 的关键字,由JVM底层实现,自动加锁/释放锁。用起来简单,作用在方法上即可。

// Synchronized
public synchronized void syncMethod() {
    // 自动加锁/释放
}

     Lock是java.util.concurrent.Locks 包下的一个接口,需要显式获取和释放锁。

Lock lock = new ReentrantLock();
lock.lock();
try {
    // 临界区
} finally {
    lock.unlock(); // 必须手动释放
}

2、对于锁的释放

Synchronized 使用过后,会自动释放锁,而Lock需要手动上锁、手动释放锁(在 finally 块中)。

3、公平锁/非公平锁

synchronized关键字是非公平锁,即不能保证等待锁的那些线程们的顺序,不支持公平锁;

而Lock的子类ReentrantLock默认是非公平锁,但是可通过一个布尔参数的构造方法实例化出一个公平锁;

4、能否尝试获取锁

Synchronized无法尝试,只能等待;而Lock通过tryLock()方法,可以尝试在一定时间内获取锁。

5、可中断性

synchronized 关键字不能响应中断,而Lock提供了更多的实现方法,而且 可响应中断、可定时,例如lock.lockInterruptibly()可以响应中断。

6、可组合性与可扩展性

Lock 可以组合成更复杂的同步结构,例如:限时锁、可轮询获取锁和可实现多个条件队列等;

synchronized 结构固定,不具备这些灵活特性。

8、性能

早期版本中,Synchronized性能较差(重量级锁),但JDK 1.6后优化(偏向锁、轻量级锁),与Lock性能接近;高并发竞争场景下,Lock的灵活性与性能可能更优。

9、使用场景

Synchronized:简单同步需求(如单方法/代码块同步),代码简洁;

Lock:复杂场景(如需要可中断、超时、公平锁、多条件变量)。

要是感觉有用就点个赞吧,谢谢大家!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值