2017-04-01 13 views
0

マルチスレッドのJavaプログラムを作成しようとしましたが、いくつかの問題が発生しましたが、プライマリのマルチスレッドクラスはうまく動作しますが、mainから呼び出すと、すべてのスレッドが開始され、すべてのスレッドが完了するまで移動しないようにする必要があります。読み取りは、渡されたファイルパスが(文字列、文字列)以下Javaマルチスレッドでスレッドが終了するのを待ちます

  Thread one = new Thread(new Runnable() { 
       public void run() 
       { 
        System.out.println("Starting thread 1"); 
        read(expiredOneYear, master1); 
        System.out.println("Finished thread 1"); 
       } 
      }); 

      Thread two = new Thread(new Runnable() { 
       public void run() 
       { 
        System.out.println("Starting thread 2"); 
        read(expiredOneAndQuarterYear, master2); 
        System.out.println("Finished thread 2"); 
       } 
      }); 

      Thread three = new Thread(new Runnable() { 
       public void run() 
       { 
        System.out.println("Starting thread 3"); 
        read(expiredOneAndHalfYear , master3); 
        System.out.println("Finished thread 3"); 
       } 
      }); 

      Thread four = new Thread(new Runnable() { 
       public void run() 
       { 
        System.out.println("Starting thread 4"); 
        read(expiredOneAnd3QuarterYear , master4); 
        System.out.println("Finished thread 4"); 
       } 
      }); 

      // start threads 
      one.start(); 
      two.start(); 
      three.start(); 
      four.start(); 

を読んで取得するメイン

CSVcompare.run(threadCount, mode, fileLocation); 
CSVpattern.run(fileLocation); 

で何が起こるか私はCSVpattern.runは()それまではCSVcompare.run内のすべてのスレッドを開始したくないです()が終了していなければ、CSVpattern.run()の準備ができているデータはありません

+0

を無視したい場合は

try { one.join(); two.join(); three.join(); four.join(); } catch (InterruptedException e) { System.out.println("Interrupt Occurred"); e.printStackTrace(); } 

は、あなたが実際に** **たCountDownLatchを必要としますここに。あなたのシナリオは、浦項の使用に完全に合っています。 – vijayraj34

答えて

1

実行終了時にjoin()にコールを追加します。 join()メソッドはスレッドが終了するのを待ちます。あなたが割り込み(おそらくそれが中断された理由を少なくとも把握する必要がありますが、これは動作します)

boolean done = false; 
while (!done) 
{ 
    try 
    { 
     one.join(); 
     two.join(); 
     three.join(); 
     four.join(); 
     done = true; 
    } 
    catch (InterruptedException e) 
    { 
     // Handle interrupt determine if need to exit. 
    } 
} 

https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#join()

+0

これをone.run()の下に追加します。私はそれを行い、処理されなかった例外タイプInterruptedException、Eclipse btwを使用しています – user3058423

+0

@ user3058423スレッドが終了するのを待っている間に割り込みが発生した場合、Well joinはInterruptedExceptionをスローできます。コードを 'try/catch'に入れてそれを処理します。私は答えを編集します。 – twain249

+0

私は更新された答えの最初の1つは、私はそれが動作するかどうかを確認するためにコードをカットした単純なバージョンを行ったと思う、私は実際には、 – user3058423

関連する問題