forked from PacktPublishing/Java-Coding-Problems
-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathMain.java
More file actions
58 lines (46 loc) · 2.1 KB
/
Copy pathMain.java
File metadata and controls
58 lines (46 loc) · 2.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
package modern.challenge;
import java.time.Clock;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ForkJoinPool;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) throws InterruptedException, ExecutionException {
int noOfProcessors = Runtime.getRuntime().availableProcessors();
System.out.println("This machine has " + noOfProcessors + " processors\n");
Clock clock = Clock.systemUTC();
Random rnd = new Random();
List<Double> numbers = new ArrayList<>();
for (int i = 0; i < 1_000_000; i++) {
numbers.add(rnd.nextDouble());
}
long startTimeV1 = clock.millis();
double result1 = numbers.stream()
.reduce((a, b) -> a + b).orElse(-1d);
displayExecutionTime(clock.millis() - startTimeV1);
System.out.println("Sequential sum: " + result1);
long startTimeV2 = clock.millis();
double result2 = numbers.parallelStream()
.reduce((a, b) -> a + b).orElse(-1d);
displayExecutionTime(clock.millis() - startTimeV2);
System.out.println("Parallel sum: " + result2);
long startTimeV3 = clock.millis();
double result3 = numbers.stream()
.parallel()
.reduce((a, b) -> a + b).orElse(-1d);
displayExecutionTime(clock.millis() - startTimeV3);
System.out.println("Parallel sum: " + result3);
ForkJoinPool customThreadPool = new ForkJoinPool(5);
long startTimeV4 = clock.millis();
double result4 = customThreadPool.submit(
() -> numbers.parallelStream().reduce((a, b) -> a + b)).get().orElse(-1d);
displayExecutionTime(clock.millis() - startTimeV4);
System.out.println("Parallel sum: " + result4);
}
private static void displayExecutionTime(long time) {
System.out.println("Execution time: " + time + " ms" + " ("
+ TimeUnit.SECONDS.convert(time, TimeUnit.MILLISECONDS) + " s)");
}
}