lockInterruptibly的简单使用
lockInterruptibly是中断获取锁的操作,可以让线程去干别的事情
代码部分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | package com.java.test.lock; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Description: * @Author: Yourheart * @Create: 2023/1/28 16:29 */ @Slf4j @RestController public class LockDemo { private Lock lock = new ReentrantLock(); @RequestMapping ( "/lockInterruptiblyThreadOne" ) public String lockInterruptiblyThreadOne() throws InterruptedException { LockDemo lockDemo= new LockDemo(); Thread t0 = new Thread( new Runnable() { @Override public void run() { lockDemo.doBussiness(); } } ); // 启动线程t0 t0.start(); Thread.sleep( 10 ); return "启动线程t1" ; } @RequestMapping ( "/lockInterruptiblyThreadTwo" ) public String lockInterruptiblyThreadTwo() throws InterruptedException { LockDemo lockDemo= new LockDemo(); Thread t1 = new Thread( new Runnable() { @Override public void run() { lockDemo.doBussiness(); dealWith(); } } ); // 启动线程t1 t1.start(); Thread.sleep( 100 ); // 线程t1没有得到锁,中断t1的等待 t1.interrupt(); return "启动线程t1" ; } public void doBussiness() { String name = Thread.currentThread().getName(); try { log.info(name + " 开始获取锁" ); lock.lockInterruptibly(); log.info(name + " 得到锁" ); log.info(name + " 开工干活" ); for ( int i = 0 ; i < 10 ; i++) { Thread.sleep( 2000 ); log.info(name + " : " + i); } } catch (InterruptedException e) { log.info(name + " 被中断" ); log.info(name + " 做些别的事情" ); } finally { try { lock.unlock(); log.info(name + " 释放锁" ); } catch (Exception e) { log.info(name + " : 没有得到锁的线程运行结束" ); } } } public void dealWith(){ log.info( "中断获取锁的操作后,开始做的事情....." ); } } |
我是采用接口的方式测试的
两个接口地址 127.0.0.1:2001/lockInterruptiblyThreadOne 127.0.0.1:2001/lockInterruptiblyThreadTwo
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异