Знакомство с Executors
1. В методе main создай фиксированный пул из 5 трэдов используя класс Executors.
2. В цикле отправь на исполнение в пул 10 задач Runnable.
3. У каждой задачи в методе run вызови метод doExpensiveOperation с порядковым номером задачи начиная с 1, см. пример вывода.
4. Запрети добавление новых задач на исполнение в пул (метод shutdown).
5. Дай пулу 5 секунд на завершение всех задач (метод awaitTermination и параметр TimeUnit.SECONDS).
Требования:
1. Используя класс Executors, создай в методе main фиксированный пул из 5 трэдов.
2. Пул должен принимать на исполнение 10 задач Runnable.
3. Каждая задача должна вызывать метод doExpensiveOperation с порядковым номером задачи, начиная с 1.
4. Запрети добавление новых задач на исполнение в пул.
5. На завершение всех задач в пуле нужно установить 5 секунд.
ExecutorService service = Executors.newFixedThreadPool(5); //Создал фиксированный пул на 5 трэдов
//с этим вариантов в консоль выводится только 5 строк
for (int i = 0; i < 10; i++) {
final int localID = i++;
service.submit(() -> doExpensiveOperation(localID));
}
//с этим вариантов в консоль выводится 10 строк
for (int i = 1; i < 11; i++) {
final int localID = i;
service.submit(() -> doExpensiveOperation(localID));
}
service.shutdown(); //запретил добавление новых задач на исполнение.
service.awaitTermination(5, TimeUnit.SECONDS); //дал пулу 5 секунд на завершение всех задач
По заданию требовалось кинуть в пул из пяти трэдов 10 заданий на исполнение.
При первом варианте в консоль выводятся только пять сообщений/заданий и валидацию задача не проходит.
При втором варианте в консоль выводятся все десять сообщений/заданий и валидацию задача проходит.
Привычнее в цикле for отсчет вести с нуля и, при необходимости, инкрементить счетчик для дальнейших вычислений (1-й вариант). Но почему получается разница в количестве отработанных задач, я не понимаю. Прошу объяснить
Артём
41 уровень
Прошу объяснить
Решен
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
JustinianJudge в Mega City OneMaster
9 октября 2019, 20:37решение
В первом цикле у тебя 5 итераций, поскольку через два прыгаешь, во втором 10, поскольку инкрементится по одному за цикл.
+4
Артём
11 октября 2019, 08:25
Спасибо. что-то я совсем затупил(
0