public class Threads_WS1516 { public static int sum(int[] input, int numThreads) { class SumThread extends Thread { private int left, right; private int[] input; private int sum; // left und right inklusive public SumThread(int[] input, int left, int right) { this.left = left; this.right = right; this.input = input; sum = 0; } public void run() { for (int i = left; i <= right; i++) { sum += input[i]; } } public int getSum() { return sum; } } int groesse = input.length / numThreads; // erzeuge und starte Threads SumThread[] t = new SumThread[numThreads]; for (int i = 0; i < numThreads-1; i++) { int left = i * groesse; int right = left + groesse - 1; t[i] = new SumThread(input, left, right); t[i].start(); } // letzter Thread: t[numThreads-1] = new SumThread(input, (numThreads-1)*groesse, input.length-1); t[numThreads-1].start(); // warte, bis alle fertig berechnet haben for (SumThread t0 : t) { while (true) { try { t0.join(); break; } catch (InterruptedException ex) { } } } // aufsummieren und Ergebnis zurückgeben int sum = 0; for (SumThread t0 : t) { sum += t0.getSum(); } return sum; } }