public class PiInterrupt extends Object implements Runnable {
private double latestPiEstimate;
public void run() {
try {
System.out.println("for comparison, Math.PI=" + Math.PI);
calcPi(0.000000001);
System.out
.println("within accuracy, latest pi=" + latestPiEstimate);
} catch (InterruptedException x) {
System.out.println("INTERRUPTED!! latest pi=" + latestPiEstimate);
}
}
private void calcPi(double accuracy) throws InterruptedException {
latestPiEstimate = 0.0;
long iteration = 0;
int sign = -1;
while (Math.abs(latestPiEstimate - Math.PI) > accuracy) {
if (Thread.interrupted()) {
throw new InterruptedException();
}
iteration++;
sign = -sign;
latestPiEstimate += sign * 4.0 / ((2 * iteration) - 1);
}
}
public static void main(String[] args) {
PiInterrupt pi = new PiInterrupt();
Thread t = new Thread(pi);
t.start();
try {
Thread.sleep(10000);
t.interrupt();
} catch (InterruptedException x) {
}
}
}
|