前提・実現したいこと
main スレッドの実行内容
スレッドのインスタンスを30個作成し、すべてのスレッドが終了したら,直ちに「Program end」を1回だけ出力
各スレッドの実行内容
①スレッドのIDを取得
②現在時刻を取得
③スレッドごとに乱数で決定した時間 (2秒以上15秒未満)待機
④現在時刻を取得
⑤スレッドID,②の時刻,待ち秒数,④の時刻を1行に表示
⑥スレッドの終了時に"Program end"を出力
発生している問題・エラーメッセージ
"program end"の出力を15秒待機させて実行しているのですが、この方法だと終了時間が分かっているときしか実行できない。
また、for文の下にSystem.out.println("Program end")を記述しても最初に出力されてしまう
そこで、最後のスレッドの終了をトリガーとして"Program end"を出力をさせたい
該当のソースコード
java
1import java.time.LocalTime; 2import java.util.Random; 3class ThreadEx extends Thread{ 4 public void run() { 5 long id = Thread.currentThread().getId(); 6 LocalTime time1 = LocalTime.now(); 7 Random random = new Random(); 8 int randomvalue = random.nextInt(13)+2; 9 try { 10 Thread.sleep(randomvalue*1000); 11 } catch (InterruptedException e) { 12 System.out.println(e); 13 } 14 LocalTime time2 = LocalTime.now(); 15 System.out.println("ID:"+id+" start "+time1+" wait "+randomvalue+" end "+time2); 16 } 17} 18 public class Report32EP421 { 19 public static void main(String[] args) { 20 ThreadEx[] TE = new ThreadEx[30]; 21 for(int i = 0;i<30;i++) { 22 TE[i] = new ThreadEx(); 23 TE[i].start(); 24 } 25 try { 26 Thread.sleep(15000); 27 } catch (InterruptedException d) { 28 System.out.println(d); 29 } 30 System.out.println("Program end"); 31 } 32 } 33 34
試したこと
最初に"Program end" が出力されてしまう
Java
1import java.time.LocalTime; 2import java.util.Random; 3class ThreadEx extends Thread{ 4 public void run() { 5 long id = Thread.currentThread().getId(); 6 LocalTime time1 = LocalTime.now(); 7 Random random = new Random(); 8 int randomvalue = random.nextInt(13)+2; 9 try { 10 Thread.sleep(randomvalue*1000); 11 } catch (InterruptedException e) { 12 System.out.println(e); 13 } 14 LocalTime time2 = LocalTime.now(); 15 System.out.println("ID:"+id+" start "+time1+" wait "+randomvalue+" end "+time2); 16 } 17} 18 public class Report32EP421 { 19 public static void main(String[] args) { 20 ThreadEx[] TE = new ThreadEx[30]; 21 for(int i = 0;i<30;i++) { 22 TE[i] = new ThreadEx(); 23 TE[i].start(); 24 } 25 System.out.println("Program end"); 26 } 27 } 28 29
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答4件
あなたの回答
tips
プレビュー