4. О чем поговорим сегодня
▪ Что такое пул потоков и для чего он нужен
▪ Интерфейсы и классы взаимодействия с пулами
потоков
▪ Фабрика пулов Executors
▪ Классы задач
▪ ForkJoinPool
6. Job providers. Две стратегии
Создание задачиПередача задания
1. Создаем задачу, которое содержит в
себе задание
2. Сообщаем задаче, что ей необходимо
выполниться
1. Создаем задание – блок кода для,
которой должен быть выполнен
асинхронно.
2. Передаем созданное задание
исполнителю
7. Стратегии построения Thread pool
1. Work arbitrage: общий арбитр, разделяющий задачи.
Например обычная blocking queue
2. Work dealing: у каждого свой набор задач,
перегруженные потоки отдают свои задачи на сторону
3. Work stealing: у каждого свой набор задач, свободные
потоки «крадут» задачи у перегруженных потоков
8. Work arbitrage
1. Direct handoffs: напрямую передаем задание
свободному работнику, либо конструируем новый
2. Unbounded queues: задание попадает в очередь, из
которой свободные работники забирают задания.
Очередь не ограничена, число работников
фиксированное
3. Bounded queues: задание попадает в очередь, из
которой свободные работники забирают задания.
Очередь и число работников ограничены
17. ForkJoinPool
Все потоки ждут на join() пока выполнится один
Или вообще оказывается, что очередную задачу
некому выполнить
join()
join()
join()
join()
join()
join()
join()
join()
join()
join()
18. ForkJoinPool
1. Собственный пул: ForkJoinPool pool=new ForkJoinPool(int n);
2. Общий пул: ForkJoinPool.commonPool() ;
• extends ExecutorService
• принимает на исполнение Runnable, Callable, ForkJoinTask
• внешне взаимодействие выглядит как с обычным пулом
Получить:
21. Использованные источники
▪ Обзор java.util.concurrent.*
[http://habrahabr.ru/company/luxoft/blog/157273/]
▪ Дмитрий Чуйко — Новинки в java.util.concurrent
[https://www.youtube.com/watch?v=aMQJnigGvfY&list=PLVe-
2wcL84b8T9aw7AaAj-Kir3CKABg55]
▪ Алексей Шипилёв — ForkJoinPool в Java 8
[https://www.youtube.com/watch?v=t0dGLFtRR9c&list=PLVe-
2wcL84b8T9aw7AaAj-Kir3CKABg55]
▪ Кей С. Хорстманн – Java SE 8. Вводный курс
22. Использованные источники
▪ Basic Java 7 Fork/Join Benchmark
[http://joerglenhard.wordpress.com/2011/09/28/basic-java-7-
forkjoin-benchmark/]
▪ Путеводитель по методам класса
java.util.concurrent.CompletableFuture
[http://habrahabr.ru/post/213319/]