Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download

📚 The CoCalc Library - books, templates and other resources

132944 views
License: OTHER
1
import java.util.ArrayList;
2
import java.util.List;
3
import java.util.concurrent.Callable;
4
import java.util.concurrent.ExecutionException;
5
import java.util.concurrent.ExecutorService;
6
import java.util.concurrent.Executors;
7
import java.util.concurrent.FutureTask;
8
import java.util.concurrent.TimeUnit;
9
import java.util.concurrent.TimeoutException;
10
11
public class MultipleCorePrimeTest {
12
public static void count(int target, int threads)
13
throws InterruptedException, TimeoutException {
14
ExecutorService executor =
15
Executors.newFixedThreadPool(threads);
16
List<FutureTask<Integer>> taskList =
17
new ArrayList<FutureTask<Integer>>();
18
long startTime = System.currentTimeMillis();
19
20
for (int i = 1; i <= threads; ++i) {
21
int ilen = target / threads;
22
23
/* Test following intervall for primes */
24
final int start = (i - 1) * ilen;
25
final int end = (i != threads)
26
? i * ilen - 1
27
: target;
28
FutureTask<Integer> task =
29
new FutureTask<Integer>(
30
new Callable<Integer>() {
31
@Override
32
public Integer call() {
33
int count = 0;
34
for (int i = start; i <= end;
35
++i) {
36
if (SingleCorePrimeTest.
37
isPrime(i))
38
++count;
39
}
40
return count;
41
}
42
});
43
taskList.add(task);
44
executor.submit(task);
45
}
46
47
executor.shutdown();
48
if (!executor.awaitTermination(10,
49
TimeUnit.MINUTES)) {
50
throw new TimeoutException();
51
}
52
final long endTime = System.currentTimeMillis();
53
int count = 0;
54
for (int i = 0; i < taskList.size(); ++i) {
55
try {
56
count += taskList.get(i).get();
57
} catch (InterruptedException e) {
58
e.printStackTrace();
59
} catch (ExecutionException e) {
60
e.printStackTrace();
61
}
62
}
63
System.out.println(threads + " thread: "
64
+ (endTime - startTime) + " ms");
65
}
66
67
public static void main(String[] args) {
68
final int target = 100_000_000;
69
try {
70
count(target, 1);
71
count(target, 2);
72
count(target, 4);
73
count(target, 8);
74
} catch (Exception e) {
75
e.printStackTrace();
76
}
77
}
78
}
79