RSA/src/Worker.java

59 line
2.0 KiB
Java

import java.math.BigInteger;
/**
* Worker class used in multithreading to check, whether a given number is a prime.
*/
public class Worker extends Thread {
private boolean isPrime;
private BigInteger minVal;
private BigInteger maxVal;
private BigInteger candidate;
private boolean finished = false;
private String threadName ;
public Worker(BigInteger candidate, BigInteger min, BigInteger max, String threadName) {
this.minVal = min;
this.maxVal = max;
this.candidate = candidate;
this.isPrime = true;
this.threadName = threadName;
//System.out.println("Created "+threadName+" for "+min+"-"+max+"");
}
/**
* Returns a flag, indicating whether the prime candidate has a divisor in the given interval.
* Since the thread might be still be running, it is important to check it first by using the
* hasFinished() method.
*
* @return flag indicating whether there is a divisor or not
*/
public boolean isPrime() {
return this.isPrime;
}
/**
* Returns if the thread has finished checking the given interval.
*
* @return the boolean
*/
public boolean hasFinished() { return this.finished; }
public void run() {
BigInteger divCandidate = minVal;
if (divCandidate.mod(BigInteger.valueOf(2)).equals(BigInteger.ZERO)){
divCandidate = divCandidate.add(BigInteger.ONE);
}
while (divCandidate.compareTo(maxVal) < 1){ //divCandidate <= maxVal
//System.out.println(this.threadName + " is testing "+divCandidate);
if (candidate.mod(divCandidate).equals(BigInteger.ZERO)) {
this.isPrime = false;
this.finished = true;
return;
}
divCandidate = divCandidate.add(BigInteger.ONE).add(BigInteger.ONE);
}
this.finished = true;
// No divisor found, we are done for this interval
}
}