Aufgabe 2.2 bearbeitet

This commit is contained in:
romanschenk37 2022-03-03 16:54:15 +01:00
parent 91aeee07fb
commit b9e8fb0665
4 changed files with 30 additions and 12 deletions

View File

@ -21,7 +21,7 @@ public class PrimeChecker {
private static void checkPrimes(int numPrimes) throws InterruptedException { private static void checkPrimes(int numPrimes) throws InterruptedException {
for (int i = 0; i < numPrimes; i++) { for (int i = 0; i < numPrimes; i++) {
new PrimeTask(nextRandom()).run(); // runs sequential in current thread new Thread(new PrimeTask(nextRandom())).start(); // runs sequential in current thread
} }
} }

View File

@ -2,6 +2,7 @@ package ch.zhaw.prog2.primechecker;
import java.util.concurrent.ExecutorService; import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class PrimeCheckerExecutor { public class PrimeCheckerExecutor {
@ -25,15 +26,16 @@ public class PrimeCheckerExecutor {
private static void checkPrimes(int numPrimes) throws InterruptedException { private static void checkPrimes(int numPrimes) throws InterruptedException {
// TODO: create ExecutorService - What ThreadPool-Type/-Size fits best? // TODO: create ExecutorService - What ThreadPool-Type/-Size fits best?
ExecutorService executor = Executors.newFixedThreadPool(12);
for (int i = 0; i < numPrimes; i++) { for (int i = 0; i < numPrimes; i++) {
// TODO: execute the runnable using the executor service // TODO: execute the runnable using the executor service
executor.execute(new PrimeTask(nextRandom()));
} }
// stop ExecutorService // TODO: stop ExecutorService
executor.shutdown();
// wait for termination with timeout of 1 minute // TODO: wait for termination with timeout of 1 minute
executor.awaitTermination(1, TimeUnit.MINUTES);
} }
private static long nextRandom() { private static long nextRandom() {

View File

@ -25,19 +25,26 @@ public class PrimeCheckerFuture {
private static void checkPrimes(int numPrimes) throws InterruptedException { private static void checkPrimes(int numPrimes) throws InterruptedException {
// TODO: create ExecutorService // TODO: create ExecutorService
ExecutorService executor = Executors.newFixedThreadPool(12);
// TODO: submit tasks to ExecutorService and collect the returned Futures in a List // TODO: submit tasks to ExecutorService and collect the returned Futures in a List
List<Future<PrimeTaskCallable.Result>> futures = new ArrayList<>();
for (int i = 0; i < numPrimes; i++) { for (int i = 0; i < numPrimes; i++) {
futures.add(executor.submit(new PrimeTaskCallable(nextRandom())));
} }
// TODO: Loop through List, wait for completion and print results // TODO: Loop through List, wait for completion and print results
for(Future<PrimeTaskCallable.Result> future : futures){
try {
System.out.println(future.get());
} catch (ExecutionException e) {
e.printStackTrace();
}
}
// TODO: stop ExecutorService // TODO: stop ExecutorService
executor.shutdown();
// TODO: await termination with timeout 1 minute // TODO: await termination with timeout 1 minute
executor.awaitTermination(1, TimeUnit.MINUTES);
} }
private static long nextRandom() { private static long nextRandom() {

View File

@ -12,7 +12,7 @@ public class PrimeTaskCallable implements Callable<PrimeTaskCallable.Result> {
public Result call() { public Result call() {
return null; return new Result(primeCandidate, findSmallestFactor(primeCandidate));
} }
/** /**
@ -47,5 +47,14 @@ public class PrimeTaskCallable implements Callable<PrimeTaskCallable.Result> {
this.factor = factor; this.factor = factor;
this.isPrime = factor == 0; this.isPrime = factor == 0;
} }
@Override
public String toString() {
return "Result{" +
"candidate=" + candidate +
", factor=" + factor +
", isPrime=" + isPrime +
'}';
}
} }
} }