Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Размер очереди тасков в ThreadPoolExecotor 
V
    Опции темы
novichiok
Дата 17.10.2011, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 15.9.2011

Репутация: нет
Всего: нет



Здравствуйте. У меня такой вопрос - есть какое то ограничение на размер очереди тасков в ThreadPoolExecutor ? Если есть, то что будет происходить если submit в пул ,будет вызываться уже после достижения максимального размера очереди ?
PM MAIL   Вверх
jk1
Дата 17.10.2011, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник
Сообщений: 1168
Регистрация: 17.10.2008
Где: Санкт-Петербург

Репутация: 40
Всего: 75



Цитата

есть какое то ограничение на размер очереди тасков в ThreadPoolExecutor ?

По умолчанию ограничение - Integer.MAX_VALUE. Его можно изменить, передав в конструктор ThreadPoolExecutor соответствующую очередь для задач. При её создании как раз можно задать ограничение.
Цитата

Если есть, то что будет происходить если submit в пул ,будет вызываться уже после достижения максимального размера очереди ? 

Для обработки этой ситуации  можно использовать собственную реализацию RejectedExecutionHandler, которую можно передать в конструктор ThreadPoolExecutor.

Это сообщение отредактировал(а) jk1 - 17.10.2011, 14:52


--------------------
Opinions are like assholes — everybody has one
PM MAIL   Вверх
novichiok
Дата 17.10.2011, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 15.9.2011

Репутация: нет
Всего: нет



Спасибо за ответ.
Цитата(jk1 @  17.10.2011,  14:52 Найти цитируемый пост)
Для обработки этой ситуации  можно использовать собственную реализацию RejectedExecutionHandler, которую можно передать в конструктор ThreadPoolExecutor.

А если я использую RejectedExecutionHandler по умолчанию, как он себя поведет при попытке сабмита в переполненную очередь ? Поток повиснет на сабмите пока блокирующая очередь не начнет опустошаться ? 
и ещё такой вопроc, я посмотрел javadoc для ThreadPoolExecutor'а - и там очередь хранящая таски типизированна на Runnable,  а как же Callable ? 



PM MAIL   Вверх
LSD
Дата 17.10.2011, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(JavaDoc)
Rejected tasks 
New tasks submitted in method execute(java.lang.Runnable) will be rejected when the Executor has been shut down, and also when the Executor uses finite bounds for both maximum threads and work queue capacity, and is saturated. In either case, the execute method invokes the RejectedExecutionHandler.rejectedExecution(java.lang.Runnable, java.util.concurrent.ThreadPoolExecutor) method of its RejectedExecutionHandler. Four predefined handler policies are provided: 
In the default ThreadPoolExecutor.AbortPolicy, the handler throws a runtime RejectedExecutionException upon rejection. 
In ThreadPoolExecutor.CallerRunsPolicy, the thread that invokes execute itself runs the task. This provides a simple feedback control mechanism that will slow down the rate that new tasks are submitted. 
In ThreadPoolExecutor.DiscardPolicy, a task that cannot be executed is simply dropped. 
In ThreadPoolExecutor.DiscardOldestPolicy, if the executor is not shut down, the task at the head of the work queue is dropped, and then execution is retried (which can fail again, causing this to be repeated.) 
It is possible to define and use other kinds of RejectedExecutionHandler classes. Doing so requires some care especially when policies are designed to work only under particular capacity or queuing policies.



--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
novichiok
Дата 17.10.2011, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 15.9.2011

Репутация: нет
Всего: нет



Ясно, спасибо

В доках сказано что RejectedExecutionHandler вызовется если таск был отвергнут методом execute(), у меня в коде таски добавляются submit()'ом. Для сабмита rejectedExecution тоже будет вызываться ? 
И потом, до сих пор не могу никак понять ... 
 void    rejectedExecution(Runnable r, ThreadPoolExecutor executor) 
Почему только Runnable ? а если у меня в пуле выполняются и Runnable и Callable ?
PM MAIL   Вверх
LSD
Дата 17.10.2011, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(novichiok @  17.10.2011,  17:18 Найти цитируемый пост)
В доках сказано что RejectedExecutionHandler вызовется если таск был отвергнут методом execute(), у меня в коде таски добавляются submit()'ом. Для сабмита rejectedExecution тоже будет вызываться ? 

На самом деле submit() методы в итоге вызывают execute(). Так что - будет.



Цитата(novichiok @  17.10.2011,  17:18 Найти цитируемый пост)
Почему только Runnable ? а если у меня в пуле выполняются и Runnable и Callable ? 

Потому, что на самом деле в submit() и Runnable и Callable оборачиваются в RunnableFuture.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
novichiok
Дата 18.10.2011, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 15.9.2011

Репутация: нет
Всего: нет



Понял, спасибо
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0482 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.