Universität Paderborn - Home Universität Paderborn
Die Universität der Informationsgesellschaft

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