Javaで時間の掛かる計算を複数のスレッドを立てて並列に計算したいのですが、
スレッドを初めて使うため、プログラムの書き方がこれでよいのか分かりません。
マルチスレッドの定石・鉄則などありましたらお教えいただければ幸いです。
やりたいことは、引数を与えて時間の掛かる計算を複数のスレッドで別々に同時に
行ない、計算結果を1つの配列変数に代入するというものです。
Java
1import java.lang.Thread.State; 2 3public class Main { 4 // 計算結果を格納する配列 5 static int[] res = new int[10]; 6 7 public static void main(String[] args) { 8 Main m = new Main(); 9 // スレッドの作成と開始 10 Thread[] threads = new MyThread[10]; 11 for (int i = 0; i < res.length; i++) { 12 threads[i] = m.new MyThread(i); 13 threads[i].start(); 14 } 15 // 全てのスレッドが終了するのを待機 16 for (;;) { 17 int i; 18 for (i = 0; i < res.length; i++) { 19 if (threads[i].getState() != State.TERMINATED) break; 20 } 21 if (i == res.length) break; 22 } 23 // 結果を標準出力する 24 for (int x : res) { 25 System.out.println(x); 26 } 27 } 28 29 // 計算スレッド 30 public class MyThread extends Thread { 31 private int i; 32 33 public MyThread(int i) { 34 this.i = i; 35 } 36 37 @Override 38 public void run() { 39 // 本来はここで時間のかかる計算を行なう 40 try { 41 Thread.sleep(10000); 42 } catch (InterruptedException e) { 43 } 44 res[i] = i * i * i; 45 } 46 } 47}
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/20 13:33