📚 The CoCalc Library - books, templates and other resources
cocalc-examples / martinthoma-latex-examples / documents / Programmierparadigmen / scripts / java / MultipleCorePrimeTest.java
132944 viewsLicense: OTHER
import java.util.ArrayList;1import java.util.List;2import java.util.concurrent.Callable;3import java.util.concurrent.ExecutionException;4import java.util.concurrent.ExecutorService;5import java.util.concurrent.Executors;6import java.util.concurrent.FutureTask;7import java.util.concurrent.TimeUnit;8import java.util.concurrent.TimeoutException;910public class MultipleCorePrimeTest {11public static void count(int target, int threads)12throws InterruptedException, TimeoutException {13ExecutorService executor =14Executors.newFixedThreadPool(threads);15List<FutureTask<Integer>> taskList =16new ArrayList<FutureTask<Integer>>();17long startTime = System.currentTimeMillis();1819for (int i = 1; i <= threads; ++i) {20int ilen = target / threads;2122/* Test following intervall for primes */23final int start = (i - 1) * ilen;24final int end = (i != threads)25? i * ilen - 126: target;27FutureTask<Integer> task =28new FutureTask<Integer>(29new Callable<Integer>() {30@Override31public Integer call() {32int count = 0;33for (int i = start; i <= end;34++i) {35if (SingleCorePrimeTest.36isPrime(i))37++count;38}39return count;40}41});42taskList.add(task);43executor.submit(task);44}4546executor.shutdown();47if (!executor.awaitTermination(10,48TimeUnit.MINUTES)) {49throw new TimeoutException();50}51final long endTime = System.currentTimeMillis();52int count = 0;53for (int i = 0; i < taskList.size(); ++i) {54try {55count += taskList.get(i).get();56} catch (InterruptedException e) {57e.printStackTrace();58} catch (ExecutionException e) {59e.printStackTrace();60}61}62System.out.println(threads + " thread: "63+ (endTime - startTime) + " ms");64}6566public static void main(String[] args) {67final int target = 100_000_000;68try {69count(target, 1);70count(target, 2);71count(target, 4);72count(target, 8);73} catch (Exception e) {74e.printStackTrace();75}76}77}7879