Что произойдет с событием, если весна SimpleAsyncTaskExecutor превысит concurrencyLimit? - PullRequest
0 голосов
/ 29 марта 2019

У меня есть прослушиватель событий, который аннотирован @async, и я использую SimpleAsyncTaskExecutor для генерации нового потока с установленным concurrencyLimit. Что произойдет, если в это же время я опубликую событие exeeds concurrencyLimit? Это будет игнорировать или просто будет ждать ждать бесплатного исполнителя? Если он подождет, заблокирует ли он главный поток, опубликовавший событие?

К сожалению, я не могу смоделировать эту ситуацию.

1 Ответ

1 голос
/ 29 марта 2019

Метод execute() перед созданием нового потока использует класс ConcurrencyThrottleSupport для обработки ограничения параллелизма;этот класс использует логику ожидания / уведомления для блокировки вызывающего потока, если достигнут предел.Перед блокировкой вызывающей стороны этот класс регистрирует отладочное сообщение.

Как следует из его названий, этот исполнитель довольно прост.A ThreadPoolTaskExecutor - лучший выбор: он повторно использует потоки и позволяет вам выбирать, что делать, когда вы достигнете предела, определяя RejectedExecutionHandler.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...