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


