随笔 - 322  文章 - 0  评论 - 4  阅读 - 77146

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 }
复制代码

 

posted on   Bytezero!  阅读(31)  评论(0编辑  收藏  举报
编辑推荐:
· 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)
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示