Java 演示线程的死锁问题
1 package bytezero.deadlock; 2 3 /** 4 * 演示线程的死锁问题: 5 * 6 * 1.死锁的理解:不同的线程分别占用对方需要的同步资源不放弃,都在等待对方放弃 7 * 自己需要的同步资源,就形成了线程的死锁 8 * 9 * 2.说明:出现死锁后,不会出现异常,不会出现提示,只是所有的线程的都处于阻塞的状态, 10 * 无法继续 11 * 我们使用同步时,要避免出现死锁。 12 * 13 * 解决方法: 14 * 专门的算法,原则 15 * 尽量减少同步资源的定义 16 * 尽量避免嵌套的同步 17 * 18 * 19 * @author Bytezero1·zhenglei! Email:420498246@qq.com 20 * create 2021-10-18 10:39 21 */ 22 public class ThreadTest { 23 public static void main(String[] args) { 24 25 StringBuffer s1 = new StringBuffer(); 26 StringBuffer s2 = new StringBuffer(); 27 28 new Thread(){ 29 @Override 30 public void run() { 31 synchronized (s1){ 32 33 s1.append("a"); 34 s2.append("1"); 35 36 try { 37 Thread.sleep(100); 38 } catch (InterruptedException e) { 39 e.printStackTrace(); 40 } 41 42 synchronized(s2){ 43 s1.append("b"); 44 s2.append("2"); 45 46 System.out.println(s1); 47 System.out.println(s2); 48 } 49 } 50 } 51 }.start(); 52 53 new Thread(new Runnable() { 54 @Override 55 public void run() { 56 synchronized (s2){ 57 s1.append("c"); 58 s2.append("3"); 59 60 try { 61 Thread.sleep(100); 62 } catch (InterruptedException e) { 63 e.printStackTrace(); 64 } 65 66 synchronized(s1){ 67 s1.append("d"); 68 s2.append("4"); 69 70 System.out.println(s1); 71 System.out.println(s2); 72 } 73 } 74 } 75 }).start(); 76 } 77 }
本文来自博客园,作者:Bytezero!,转载请注明原文链接:https://www.cnblogs.com/Bytezero/p/15419683.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)