java线程互锁演示

java线程互锁演示

 1  /**
 2   * 线程互锁:线程td1得到obj1的锁,线程td2得到了obj2的锁,接着,线程td1在持有obj1的锁的同时
 3   * 企图得到obj2的锁,而此时线程td2仍持有obj2的锁,所以线程td1等待,而线程td2的行为也与线程td1相同
 4   * 因此就形成了死锁
 5    */
 6  public   class  Client {
 7       public   static   void  main(String[] args) {
 8           final  Object obj1  =   " test1 " ;
 9           final  Object obj2  =   " test2 " ;
10          
11          Thread td1  =   new  Thread(){
12               public   void  run(){
13                   synchronized (obj1){
14                      System.out.println( " td1得到了obj1的锁 " );
15                       try  {
16                          Thread.sleep( 1000 );
17                      }  catch  (InterruptedException e) {
18                          e.printStackTrace();
19                      }
20                      
21                       synchronized (obj2){
22                          System.out.println( " td1企图得到obj2的锁 " );
23                          
24                           try  {
25                              Thread.sleep( 1000 );
26                          }  catch  (InterruptedException e) {
27                              e.printStackTrace();
28                          }
29                      }
30                  }
31              }
32          };
33          
34 
35          Thread td2  =   new  Thread(){
36               public   void  run(){
37                   synchronized (obj2){
38                      System.out.println( " td2得到了obj2的锁 " );
39                       try  {
40                          Thread.sleep( 1000 );
41                      }  catch  (InterruptedException e) {
42                          e.printStackTrace();
43                      }
44                      
45                       synchronized (obj1){
46                          System.out.println( " td2企图得到obj1的锁 " );
47                          
48                           try  {
49                              Thread.sleep( 1000 );
50                          }  catch  (InterruptedException e) {
51                              e.printStackTrace();
52                          }
53                      }
54                  }
55              }
56          };
57          
58          td1.start();
59          td2.start();
60      }
61 
62  }

你可能感兴趣的:(java线程互锁演示)