パラレルプログラミングに精通するために、4つのスレッドを使用して配列のすべての要素の合計を計算する簡単なjavaパラレルプログラムを作成したかったのです。ここでシンプルなjavaパラレルプログラム
は、Threadクラスを拡張することSumClassです:
public class SumThread extends Thread {
int lo;
int ho;
int Arr[];
int ans=0;
//constructor
SumThread(int Arr[], int lo, int ho){
this.Arr = Arr;
this.lo = lo;
this.ho = ho;
}
public void run(){
for (int i=lo; i<ho; i++){
ans += Arr[i];
}
}
}
そして、ここで私たちはメインクラスを持っている:
public static void main(String[] args) {
// TODO Auto-generated method stub
int Arr[] = { 1, 3, 4, 5, 5, 6, 7, 2, 7, 5, 2, 4 };
int ans = 0;
SumThread[] sum = new SumThread[4];
for (int i = 0; i < 4; i++) {
sum[i] = new SumThread(Arr, (i * Arr.length)/4, Arr.length * ((i + 1)/4));
sum[i].start();
}
for (int i = 0; i < 4; i++) {
try {
sum[i].join();
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
for (int i = 0; i < 4; i++) {
ans += sum[i].ans;
}
System.out.println(ans);
}
}
私は待つために参加する()関数を使用しましたans値にアクセスして印刷する前に終了するスレッド。 ポイントは私が結果として11を得て、それは完全に間違っています。私はそれが最後の3つの値(5,2,4)だけを合計することに気づいた。 4番目のスレッドだけが起動するようです。
私は間違っていますか?
'int型ANS = IntStream.of(編曲).SUM();' –
何あなたは '(i + 1)/ 4'があなたに与えると思いますか? 'i' = 1または2の場合は0、3と4の場合は1です。 – bcsb1001
本当に愚かな間違いでした。明らかにあなたは正しいです、私はその部分で整数を使用することはできません!大いに感謝する!それは今働きます! – DevX10