#java #multithreading #threadpool #threadpoolexecutor
#java #многопоточность #threadpool #threadpoolexecutor
Вопрос:
Я хочу знать основное различие между ThreadPoolTaskExecutor и ThreadPoolExecutor. Какой из них я должен выбрать и почему?
Комментарии:
1. Начните с их соответствующего Javadoc.
Ответ №1:
Посмотрите ссылку на документацию, чтобы четко понять различия.
ExecutorService, который выполняет каждую отправленную задачу, используя один из, возможно, нескольких объединенных потоков, обычно настраивается с использованием заводских методов исполнителей.
Пулы потоков решают две разные проблемы: они обычно обеспечивают повышенную производительность при выполнении большого количества асинхронных задач из-за снижения накладных расходов на вызов каждой задачи, и они предоставляют средства ограничения и управления ресурсами, включая потоки, потребляемые при выполнении набора задач.
JavaBean, который позволяет настраивать a ThreadPoolExecutor
в стиле bean (через его свойства «corePoolSize«, «maxPoolSize«, «keepAliveSeconds«, «queueCapacity«) и предоставлять его как Spring TaskExecutor.
Этот класс также хорошо подходит для управления и мониторинга (например, через JMX), предоставляя несколько полезных атрибутов: «corePoolSize«, «maxPoolSize«, «keepAliveSeconds» (все поддерживающие обновления во время выполнения); «poolSize«, «activeCount» (только для самоанализа).
Ответ №2:
Они в основном идентичны с точки зрения функциональности. Разница в том, хотите ли вы инициализировать его с помощью конструктора (рекомендуется, если он создан в коде Java) или с помощью установщиков (рекомендуется, если создан в Spring).