package blatt13; public class SummierRunnable implements Runnable { private int sum, length, start; private int[] input; public SummierRunnable(int[] input, int start, int length) { sum = 0; this.length = length; this.start = start; this.input = input; } @Override public void run() { for (int i = 0; i < length; i++) sum += input[start + i]; } public static int sum(int[] input, int numThreads) { if (numThreads <= 0) throw new IllegalArgumentException("at least one thread"); Thread[] threads = new Thread[numThreads]; SummierRunnable[] runs = new SummierRunnable[numThreads]; int start = 0; for (int i = 0; i < numThreads-1; i++) { int length = input.length / numThreads; runs[i] = new SummierRunnable(input, start, length); threads[i] = new Thread(runs[i]); threads[i].start(); start += length; } // letzter Thread separat: runs[numThreads-1] = new SummierRunnable(input, start, input.length-start); threads[numThreads-1] = new Thread(runs[numThreads-1]); threads[numThreads-1].start(); for (Thread t : threads) { while (true) { try { t.join(); break; } catch (InterruptedException exc) {} } } int sum = 0; for (SummierRunnable run : runs) { sum += run.sum; } return sum; } public static void main(String[] args) { int[] arr = {1,2,3,4,5,6,7,8,9}; System.out.println(sum(arr, 1)); } }