-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathParallelMain5.java
More file actions
41 lines (32 loc) · 1.46 KB
/
Copy pathParallelMain5.java
File metadata and controls
41 lines (32 loc) · 1.46 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
package parallel;
import util.MyLogger;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ForkJoinPool;
import java.util.stream.IntStream;
import static util.MyLogger.*;
public class ParallelMain5 {
public static void main(String[] args) throws InterruptedException {
// 병렬 수준 3으로 제한
System.setProperty("java.util.concurrent.ForkJoinPool.common.parallelism","3");
// System.out.println("ForkJoinPool.commonPool() = " + ForkJoinPool.commonPool());
ExecutorService requestPool = Executors.newFixedThreadPool(100);
int nThreads = 10; // 1, 2, 3, 10, 20
for (int i = 1; i <= nThreads; i++) {
String requestName = "request" + i;
requestPool.submit(() -> logic(requestName));
Thread.sleep(100); // 스레드 순서를 확인하기 위해 약간 대기
}
requestPool.shutdown();
}
private static void logic(String requestName) {
log("[" + requestName + "] START");
long startTime = System.currentTimeMillis();
int sum = IntStream.rangeClosed(1,4)
.parallel() // 추석 처리가 더 빨리 처리될 수 있음
.map(i -> HeavyJob.headvyTask(i, requestName))
.reduce(0, (a,b) -> a+b);
long endTime = System.currentTimeMillis();
log("[" + requestName + "] time: " + (endTime - startTime) + "ms, sum: " + sum);
}
}