线程的死锁问题

 1 package com.atfu.java01;
 2 
 3 /**
 4  * 演示线程的死锁问题
 5  * 1.死锁的理解:不同的线程分别占用对方需要的同步资源不放弃,都在等对方放弃自己需要的同步资源,就形成了线程的死锁
 6  *
 7  * 2.说明:
 8  *  1)出现死锁后,不会出现异常,不会出现提示,只是所有的线程都处于阻塞状态,无法继续
 9  *  2)我们使用同步时,要避免出现死锁。
10  *
11  * @author fu jingchao
12  * @creat 2021/10/18-22:46
13  */
14 public class ThreadTest {
15     public static void main(String[] args) {
16         StringBuffer s1 = new StringBuffer();
17         StringBuffer s2 = new StringBuffer();
18 
19         new Thread(){
20             @Override
21             public void run() {
22                 synchronized (s1){
23                     s1.append('a');
24                     s2.append('1');
25                     try {
26                         Thread.sleep(100);
27                     } catch (InterruptedException e) {
28                         e.printStackTrace();
29                     }
30                     synchronized (s2){
31                         s1.append('b');
32                         s2.append('2');
33                         System.out.println(s1);
34                         System.out.println(s2);
35                     }
36                 }
37             }
38         }.start();
39 
40         new Thread(new Runnable() {
41             @Override
42             public void run() {
43                 synchronized (s2){
44                     s1.append('c');
45                     s2.append('3');
46                     try {
47                         Thread.sleep(100);
48                     } catch (InterruptedException e) {
49                         e.printStackTrace();
50                     }
51                     synchronized (s1){
52                         s1.append('d');
53                         s2.append('4');
54                         System.out.println(s1);
55                         System.out.println(s2);
56                     }
57                 }
58             }
59         }){
60         }.start();
61 
62     }
63 }

 

posted @ 2021-10-18 23:07  橘猫的夏天  阅读(28)  评论(0编辑  收藏  举报