ReentrantLock
ReentrantLock:重入锁的意思。与synchronized作用差不多,区别就是synchronized加锁放锁看不见,而这个重入锁加锁放锁看的见
1 package thread; 2 3 import java.util.concurrent.locks.Lock; 4 import java.util.concurrent.locks.ReentrantLock; 5 6 public class 重入锁 { 7 public static void main(String[] args) { 8 T t = new T(); 9 Thread thread1 = new Thread(t); 10 Thread thread2 = new Thread(t); 11 Thread thread3 = new Thread(t); 12 thread1.start(); 13 thread2.start(); 14 thread3.start(); 15 16 17 } 18 } 19 20 class T implements Runnable { 21 private int count = 10; 22 private final ReentrantLock lock = new ReentrantLock(); 23 @Override 24 public void run() { 25 while (true) { 26 try { 27 // 加锁 28 lock.lock(); 29 if (count > 0) { 30 31 try { 32 Thread.sleep(1000); 33 } catch (InterruptedException e) { 34 e.printStackTrace(); 35 } 36 System.out.println(--count); 37 } 38 } finally { 39 // 解锁 40 lock.unlock(); 41 } 42 43 44 } 45 } 46 }
一般把加锁解锁放在try finally语句里面包裹
posted on 2021-05-26 15:19 Love&Share 阅读(60) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~