Java的Lock接口介绍以及与synchronized关键字的区别

本文介绍了Java SE 5引入的Lock接口及其与synchronized关键字的区别。Lock接口提供了更灵活的锁管理方式,包括非阻塞性获取锁、可中断获取锁及超时获取锁等功能。

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

Lock接口

Lock接口是在Java SE5之后出现的,在并发包中新增的Lock接口以及相关的实现类来实现锁的功能。

Lock和synchronized关键字的区别

synchronized可以隐式的获取释放锁(通过synchronized方法块或者方法实现)。Lock接口在使用的时候需要显式的获取释放锁。但是拥有了锁的获取和释放的可操作性行、可中断的获取锁,以及超时获取锁等多种synchronized不具备的功能。
synchronized关键字会隐式的获取释放锁,相当于把锁固化了,虽然简便了同步的管理但是扩展性就远不如Lock接口所实现的锁功能。

Lock提供的synchronized不具备的关键特性

特性描述
尝试非阻塞的获取锁当前线程尝试获取锁,如果这一时刻锁没有被其他线程获取到,则成功获取到锁
能被中断的获取锁与synchronized不同,获取到锁的线程能被中断,中断时抛出中断异常,同时锁会被释放
超时获取锁在指定的时间内获取到锁,如果规定时间内没有获取到锁,则返回

Lock的API

方法名描述
void lock()获取锁,调用该方法当前线程会获得锁,获得锁后返回
void lockInterruptibly()throws InterruptedException可中断的获取锁,该方法会响应中断,在锁的获取中可以中断当前线程
boolean tryLock尝试非阻塞的获取锁,调用该方法立即返回。如果获取到返回true,否则false
boolean tryLock(long time, TimeUnit unit)throws InterruptedException超时的获取锁,在三种情况下会返回:1、线程在时间内获得锁 2、线程在时间内被中断 3、时间结束,返回false
void unlock()释放锁
Condition newCondition()获得等待通知组件,该组件和当前的锁绑定,当前线程只有获得了锁,才能调用该组件的wait()方法,调用后,当前线程将释放锁
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值