Parallel Programming WS 2014/2015 - File PrimeTest.java
import java.util.Set; import java.util.HashSet; import java.util.Random; class PrimeGenerator extends Thread { private Random rand = new Random(System.currentTimeMillis()); private Channel oc = new Channel(); private int getRandomNumber() { return Math.abs(rand.nextInt()) % 1000 + 2; } public void run() { while (true) { oc.send(new Integer(getRandomNumber())); } } public Channel getOc() { return oc; } } class PrimeChecker extends Thread { private Channel ic, oc; public PrimeChecker(Channel ic, Channel oc) { this.ic = ic; this.oc = oc; } private boolean isPrime(int n) { if (n % 2 == 0) { return false; } // exclude even numbers; int div = 3; while (div * div <= n) { if (n % div == 0) { return false; } div += 2; } return true; } public void run() { while (true) { Integer i = (Integer) ic.receive(); if (isPrime(i)) { oc.send(i); } } } } class PrimeReporter extends Thread { private Set<Integer> oldNumbers = new HashSet<Integer>(); private Channel ic = new Channel(); private void reportNewNumber(Integer num) { if (oldNumbers.add(num)) { System.out.println("PrimeReporter reports " + num); } } public void run() { while (true) { reportNewNumber((Integer) ic.receive()); } } public Channel getIc() { return ic; } } public class PrimeTest { private static final int N = 4; // number of PrimeCheckers public static void main(String[] args) { PrimeGenerator pg = new PrimeGenerator(); pg.start(); PrimeReporter pr = new PrimeReporter(); pr.start(); for (int i = 0; i < N; i++) { new PrimeChecker(pg.getOc(), pr.getIc()).start(); } } }
Generiert mit Camelot | Probleme mit Camelot? | Geändert am: 26.01.2015