码迷,mamicode.com
首页 > 编程语言 > 详细

java模拟线程死锁

时间:2015-10-03 13:10:25      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

 1 public class Main{
 2 
 3     /*模拟死锁
 4      * 
 5      * PersonA要拿到B才把A给B
 6      * PersonB要拿到A才把B给A
 7      * 
 8      * 
 9      * 
10      */
11     
12     public static void main(String[] args) {
13         new Thread(new Run(true)).start();
14         new Thread(new Run(false)).start();
15     }
16 
17 }
18 
19 class PersonA{
20     
21     public void say(){
22         System.out.println("A说:把B给我");
23     }
24     
25     public void getB(){
26         System.out.println("A得到了B的东西");
27     }
28 }
29 
30 class PersonB{
31     public void say(){
32         System.out.println("B说:把A给我");
33     }
34     
35     public void getA(){
36         System.out.println("B得到了A的东西");
37     }
38 }
39 
40 class Run implements Runnable{
41     
42     //一定要是静态的对象
43     static PersonA a = new PersonA();
44     static PersonB b = new PersonB();
45     private boolean aGiveB;        //是否是A给B
46     
47     public Run(boolean aGiveB){
48         this.aGiveB = aGiveB;
49     }
50     
51     @Override
52     public void run() {
53         if(aGiveB){
54             synchronized (b) {
55                 b.say();
56                 try {
57                     Thread.sleep(500);
58                 } catch (InterruptedException e) {
59                     e.printStackTrace();
60                 }
61                 synchronized (a) {
62                     System.out.println("a把A给了b");
63                     b.getA();
64                 }
65             }
66         }else{
67             synchronized (a) {
68                 a.say();
69                 try {
70                     Thread.sleep(500);
71                 } catch (InterruptedException e) {
72                     e.printStackTrace();
73                 }
74                 synchronized (b) {
75                     System.out.println("b把B给了a");
76                     a.getB();
77                 }
78             }
79         }
80     }
81     
82 }

 

java模拟线程死锁

标签:

原文地址:http://www.cnblogs.com/zlzlzl/p/4853240.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!