2016-11-05 20 views
-3

簡単試してみたいデッドロック例です。私は問題が(Thread t1 = new Thread() {)(Thread t1 = new Thread() {)にあることを知っています。Java - 並列処理デッドロック

ローカル変数t1の値は使用されません。

しかし、私はそれを修正することはできません。

public static void main(String[] args) { 

    final String passenger1 ="pick passenger1"; 
    final String passenger2 ="pick passenger2"; 

    Thread t1 = new Thread() {  
     public void run(){   
     synchronized (passenger1) { 

     System.out.println("Thread 1: locked passenger1 "); 

     try { Thread.sleep(100);} catch (Exception e) {} 
    System.out.println("Thread 1: waiting to get passenger 2 ");  
    synchronized (passenger2) { 
     System.out.println("Thread 1: locked passenger 2");   
     }  } } }; 

    Thread t2 = new Thread() { 

    public void run() { 
    synchronized (passenger2) { 

     System.out.println("Thread 2: locked passenger2 "); 

     try { Thread.sleep(100);}catch (Exception e) {} 

    System.out.println("Thread 2: waiting to get passenger1 "); 

    synchronized (passenger1) { 

     System.out.println("Thread 2: locked passenger1"); 
        } 
       }  
      } 
     }; 
    } 
} 
+0

これを修正するために何をやってみましたか?また、実際にスレッドを開始することもありません。 – UnholySheep

+0

[実行]/[デバッグ]をクリックしても何も起こりません –

+0

実行をクリックすると自分のプログラムが起動しません –

答えて

0

警告は自己説明的です。変数t1を定義しますが、どこにも使用しません。それを使用しないと、何も起こりません。私は実行たぶんあなただけのオブジェクトを作成するのではなく、スレッドを開始した意図したもの

をクリックしたときに

私のプログラムは起動しません。

Thread t1 = new Thread .... // creates a Thread object. 
t1.start(); // actually starts the thread. 
+0

ありがとうございました! :) –