powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Очередь потоков
9 сообщений из 9, страница 1 из 1
Очередь потоков
    #39108971
Pierre Cardin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подскажите способ, как реализовать в Java следующее:

1) генерируются экземпляры класса Runnable в количестве 1000 штук
2) кладуться в очередь (пул?) исполнения
3) когда исполнится последний поток из очереди продолжить выполнение программы
...
Рейтинг: 0 / 0
Очередь потоков
    #39108980
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pierre Cardin,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
ExecutorService executor = Executors.newFixedThreadPool(...);
Collection<Future> futures = ... //Whatever

for (...) {
    futures.add(executor.submit(
        new Runnable(){
           //Whatever
        }
    ));
}

for(Future future : futures){
    future.get(); //Читаем JavaDoc чтобы увидеть там заветное слово Wait
}



Если использовать Callable, то можно засабмитить сразу всю пачку.
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html#invokeAll(java.util.Collection)
...
Рейтинг: 0 / 0
Очередь потоков
    #39108988
Pierre Cardin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

сразу вопрос - если я инициализирую ExecutorService как:
Код: java
1.
ExecutorService executorService = Executors.newFixedThreadPool(20);


могу я при этом сразу циклом в него "засунуть" 1000 потоков - они все будут положены в очередь и постепенно выполнены?
...
Рейтинг: 0 / 0
Очередь потоков
    #39109011
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pierre Cardin,

Вы в очередь executor помещаете задачи, а не потоки. Пока вы будете туда помещать потоки, эта фигня будет для вас магическим ящиком.
Runnable/Callable - это задача (Task), а не поток (Thread)
Эти задачи executor помещает в очередь Queue
Оттуда он из достаёт и запускает через потоки, которых максимум 20.

Это всё в первом приближении, ещё существует 100500 вариаций и с количеством потоков и с лимитом очереди и т.п.
...
Рейтинг: 0 / 0
Очередь потоков
    #39109034
Pierre Cardin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все получилось, спасибо!
...
Рейтинг: 0 / 0
Очередь потоков
    #39109363
Pierre Cardin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если потоки на протяжении работы программы постоянно растут, как на изображении, то после цикла с future.get() должен стоять executor.shutdown() ? Или этот график в jconsole показывает суммарное число порожденных потоков?
...
Рейтинг: 0 / 0
Очередь потоков
    #39109398
Pierre Cardin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, shutdown() помог. Спасибо :)
...
Рейтинг: 0 / 0
Очередь потоков
    #39109508
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pierre Cardin,

Есть смысл переиспользовать executor , а не создавать каждый раз новый.
...
Рейтинг: 0 / 0
Очередь потоков
    #39109737
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Pierre Cardin, а какого рода задачи решают "экземпляры класса Runnable" ?
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Очередь потоков
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]