-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathSolution.java
More file actions
96 lines (66 loc) · 3.71 KB
/
Copy pathSolution.java
File metadata and controls
96 lines (66 loc) · 3.71 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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//Now Jesus knew that they were desirous to ask him, and said unto them, Do ye inquire among yourselves of that I said,
//A little while, and ye shall not see me: and again, a little while, and ye shall see me? (John 16:19)
package com.javarush.task.task28.task2807;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
/*
Знакомство с ThreadPoolExecutor
*/
public class Solution {
public static void main(String[] args) throws InterruptedException {
LinkedBlockingQueue<Runnable> queue = new LinkedBlockingQueue<>();
for (int i = 1; i <= 10; i++) {
final int finalI = i;
Runnable runnable = new Runnable() {
@Override
public void run() {
doExpensiveOperation(finalI);
}
};
queue.add(runnable);
}
ThreadPoolExecutor service = new ThreadPoolExecutor(3, 5, 1000, TimeUnit.MILLISECONDS, queue);
service.prestartAllCoreThreads();
service.shutdown();
service.awaitTermination(5, TimeUnit.SECONDS);
/* output example
pool-1-thread-2, localId=2
pool-1-thread-3, localId=3
pool-1-thread-1, localId=1
pool-1-thread-3, localId=5
pool-1-thread-2, localId=4
pool-1-thread-3, localId=7
pool-1-thread-1, localId=6
pool-1-thread-3, localId=9
pool-1-thread-2, localId=8
pool-1-thread-1, localId=10
*/
}
private static void doExpensiveOperation(int localId) {
System.out.println(Thread.currentThread().getName() + ", localId=" + localId);
}
}
/*
Знакомство с ThreadPoolExecutor
1. В методе main создай очередь LinkedBlockingQueue<Runnable>.
2. В цикле добавь в очередь 10 задач Runnable.
3. У каждой задачи в методе run вызови метод doExpensiveOperation с порядковым номером задачи начиная с 1, см. пример вывода.
4. Создай объект ThreadPoolExecutor со следующими параметрами:
- основное количество трэдов (ядро) = 3,
- максимальное количество трэдов = 5,
- время удержания трэда живым после завершения работы = 1000,
- тайм-юнит - миллисекунды,
- созданная в п.1. очередь с задачами.
5. Запусти все трэды, которые входят в основное кол-во трэдов - ядро, используй метод prestartAllCoreThreads.
6. Запрети добавление новых задач на исполнение в пул (метод shutdown).
7. Дай объекту ThreadPoolExecutor 5 секунд на завершение всех тасок (метод awaitTermination и параметр TimeUnit.SECONDS).
Требования:
1. В методе main нужно создать очередь LinkedBlockingQueue.
2. В цикле добавь в очередь 10 задач Runnable.
3. Нужно создать объект ThreadPoolExecutor с параметрами, указанными в задании.
4. С помощью метода prestartAllCoreThreads нужно запустить основные трэды.
5. Каждая задача должна вызывать метод doExpensiveOperation с порядковым номером задачи, начиная с 1.
6. Запрети добавление новых задач на исполнение в пул.
7. На завершение всех задач в пуле нужно установить 5 секунд.
*/