ReentrantLock vs synchronized

文章介绍了 ReentrantLock 可完全替代 synchronized,它有 tryLock() 方法可尝试获取锁,还有重载方法可指定尝试时间;lockInterruptibly() 方法获取锁失败阻塞后能响应中断;还提供公平锁。同时总结了二者主要区别,如 ReentrantLock 用 CAS 实现,synchronized 是锁升级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ReentrantLock 是完全可以替代 synchronized,synchronized 能干的 ReentrantLock 都能干,但 ReentrantLock 能干的 synchronized 不一定能干,例如:

  1. ReentrantLock 提供了 tryLock() 方法,会尝试获取锁,如果获取锁了就返回 true,没获取就返回 false,但无论有没有获取锁,都会继续执行之后的代码;此外 tryLock() 还有一个重载的方法 tryLock(long time, TimeUnit unit),可以指定尝试的时间,详情请参考如下文章:Lock 之 tryLock

  2. ReentrantLock 还提供了 lockInterruptibly() 方法获取锁,使用这种方法获取锁失败阻塞后是可以响应中断的,详情请参考如下文章:中断异常测试

  3. ReentrantLock 提供了公平锁,使用方式如下:

    Lock lock = new ReentrantLock(true);
    

    不传参时默认是非公平锁,传入 true 是公平锁,传入 false 是非公平锁。

ReentrantLock 和 synchronized 主要区别总结如下:

  • ReentrantLock 使用 CAS 实现,synchronized 是锁升级。
  • tryLock()
  • lockInterruptibly()
  • 公平锁
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值