Java学习-死锁练习

3个同步对象a, b, c
3个线程 t1,t2,t3
故意设计场景,使这3个线程彼此死锁

 1 package multiplethread;
 2 
 3 import charactor.Hero;
 4 
 5 public class Test5 {
 6     public static void main(String[] args) {
 7           Hero a=new Hero("a");
 8           Hero b=new Hero("b");
 9           Hero c=new Hero("c");
10           Thread t1=new Thread(){
11               public void run(){
12                   synchronized (a) {
13                     System.out.println("t1已经占有a");
14                     try {
15                         Thread.sleep(1000);
16                     } catch (InterruptedException e) {
17                         // TODO Auto-generated catch block
18                         e.printStackTrace();
19                     }
20                     System.out.println("t1试图占有b");
21                     synchronized (b) {
22                         System.out.println("占有成功");
23                     }
24                 }
25               }
26           };
27           t1.start();
28           Thread t2=new Thread(){
29               public void run(){
30                   synchronized (b) {
31                     System.out.println("t2已经占有b");
32                     try {
33                         Thread.sleep(1000);
34                     } catch (InterruptedException e) {
35                         // TODO Auto-generated catch block
36                         e.printStackTrace();
37                     }
38                     System.out.println("t2试图占有c");
39                     synchronized (c) {
40                         System.out.println("占有成功");
41                     }
42                 }
43               }
44           };
45           t2.start();
46           Thread t3=new Thread(){
47               public void run(){
48                   synchronized (c) {
49                     System.out.println("t3已经占有c");
50                     try {
51                         Thread.sleep(1000);
52                     } catch (InterruptedException e) {
53                         // TODO Auto-generated catch block
54                         e.printStackTrace();
55                     }
56                     System.out.println("t3试图占有a");
57                     synchronized (a) {
58                         System.out.println("占有成功");
59                     }
60                 }
61               }
62           };
63           t3.start();
64     }
65 }

效果图:

猜你喜欢

转载自www.cnblogs.com/gilgamesh-hjb/p/12236044.html