面试突击:Lock、TryLock、LockInterruptibly有什么区别?|世界速读
(资料图片仅供参考)
4 个方法的特性各不相同,需要根据实际的业务情况选择合适获取锁的方法。
在 Lock 接口中,获取锁的方法有 4个:lock()、tryLock()、tryLock(long,TimeUnit)、lockInterruptibly(),为什么需要这么多方法?这些方法都有什么区别?接下来我们一起来看。
lock 方法
lock 方法是 Lock接口中最基础的获取锁的方法,当有可用锁时会直接得到锁并立即返回,当没有可用锁时会一直等待,直到获取到锁为止,它的基础用法如下:
Lock lock = new ReentrantLock();// 获取锁lock.lock();try { // 执行业务代码...} finally { //释放锁 lock.unlock(); }lockInterruptibly 方法
lockInterruptibly 方法和 lock方法类似,当有可用锁时会直接得到锁并立即返回,如果没有可用锁会一直等待直到获取锁,但和 lock 方法不同,lockInterruptibly方法在等待获取时,如果遇到线程中断会放弃获取锁。它的基础用法如下:
Lock lock = new ReentrantLock();try { // 获取锁 lock.lockInterruptibly(); try { // 执行业务方法... } finally { // 释放锁 lock.unlock(); }} catch (InterruptedException e) { e.printStackTrace();}PS:使用 thread.interrupt() 方法可以中断线程执行。
tryLock 方法
与前面的两个方法不同,使用无参的 tryLock 方法会尝试获取锁,并立即返回获取锁的结果(true 或false),如果有可用锁返回 true,并得到此锁,如果没有可用锁会立即返回 false。它的基础用法如下:
Lock lock = new ReentrantLock();// 获取锁boolean result = lock.tryLock();if (result) { try { // 获取锁成功,执行业务代码... } finally { // 释放锁 lock.unlock(); }} else { // 执行获取锁失败的业务代码...}tryLock(long,TimeUnit) 方法
有参数的 tryLock(long,TimeUnit) 方法需要设置两个参数,第一个参数是 long类型的超时时间,第二个参数是对参数一的时间类型描述(比如第一参数是 3,那么它究竟是 3 秒还是 3分钟,是第二个参数说了算的)。在这段时间内如果获取到可用的锁了就返回 true,如果在定义的时间内,没有得到锁就会返回 false。它的基础用法如下:
Lock lock = new ReentrantLock();try { // 获取锁(最多等待 3s,如果获取不到锁就返回 false) boolean result = lock.tryLock(3, TimeUnit.SECONDS); if (result) { try { // 获取锁成功,执行业务代码... } finally { // 释放锁 lock.unlock(); } } else { // 执行获取锁失败的业务代码... }} catch (InterruptedException e) { e.printStackTrace();}总结
lock()、tryLock()、tryLock(long,TimeUnit)、lockInterruptibly() 都是用来获取锁的,其中lock 方法如果获取不到锁会一直阻塞等待;而 lockInterruptibly 方法虽然也会阻塞等待获取锁,但它却能中途响应线程的中断;无参的tryLock 方法会立马返回一个获取锁成功与失败的结果,有参数的 tryLock(long,TimeUnit)方法会在设定的时间内返回一个获取锁成功与失败的结果。这 4 个方法的特性各不相同,需要根据实际的业务情况选择合适获取锁的方法。
相关新闻
- 面试突击:Lock、TryLock、LockInterruptibly有什么区别?|世界速读
- oppo s9k固件升级(oppo s9k) 世界讯息
- 柯力传感:拟与光明科学城设立合资公司|全球滚动
- 环球通讯!加拿大西部野火蔓延 2.5万人疏散
- 体现特殊关系?美日韩指挥官首次同登战略核潜艇_要闻
- 贵州省黔西南布依族苗族自治州兴义市2023-05-07 10:55发布干旱橙色预警
- 新思想引领新征程·河北答卷丨振兴路上大步走 燕赵乡村好风景|全球热议
- 热讯:许昌市出台十大产业集群培育计划,涵盖人工智能
- 如何清洁葵花籽_情人节男朋友不送礼物 快播报
- 全球焦点!孟家巷9号
- 公网ip怎么申请(申请公网ip)-实时焦点
- 马洛塔:如果莱奥因伤缺席欧冠半决赛,皮奥利也能找到替代者|天天资讯
- 两个路由器怎么设置一个名称_两个路由器怎么设置
- 天天即时:millionof和millionsof的用法 millionof的用法
- 列管式换热器分类-换热器分类
- 阿里云法定代表人变更 蔡英华接替张建锋
- 全球快看点丨银昆高速全线油坊梁特大桥双幅合龙
- 报道:国海证券给予金发科技买入评级 2022年报及2023一季报点评:2022年业绩同比+19.89% 静待一体化布局开花结果
- 2022电动四轮车十大品牌排行榜_电动四轮车哪个牌子好-当前信息
- 上海票交所:1月1日至4月30日发生3次以上承兑人逾期的承兑人数量为1629家