package blatt14; public class FindMax extends Thread { private final boolean isMaster; private final int start; // Bereichsanfang private final int size; // Bereichsgroesse private final int[] data; // Stores the result of this thread: public int max = Integer.MIN_VALUE; // Constructor for master. public FindMax(int[] data, int size) { this.data = data; this.start = 0; this.size = size; isMaster = true; } // Constructor for slave. public FindMax(int[] data, int start, int size) { this.data = data; this.start = start; this.size = size; this.isMaster = false; } public void run() { try { // Handles all possible InterruptedExceptions if (isMaster) { // Code for master System.out.println("master"); int amount = data.length/size; FindMax[] t = new FindMax[amount]; for (int i = 0; i < amount; i++) { t[i] = new FindMax(data, i*size, size); t[i].start(); } for (int i = amount*size; i < data.length; i++) { if (data[i] > max) { max = data[i]; } } for (int i = 0; i < amount; i++) { t[i].join(); } for (FindMax c : t) { if (c.max > max) max = c.max; } } else { // Code for slaves System.out.println("slave , " + start + " to " + (start + size - 1)); for (int i = start; i < start+size; i++) { if (data[i] > max) max = data[i]; } } } catch (InterruptedException ie) { System.err.println("Oh No!"); System.exit(-1); } } public static void main(String[] args) throws InterruptedException { int[] testData = {477, 9, 1, 177, 23}; FindMax master = new FindMax(testData, 2); master.start(); master.join(); System.out.println(master.max); } }