Spring ThreadPoolTaskExecutor vs Java Executorservice cachedthreadpool

Каковы плюсы и минусы использования

Spring ThreadPoolTaskExecutor vs Java Executorservice cachedthreadpool хотя весна является оболочкой параллелизма Java.

Просто хотелось бы знать гибкость в их использовании.

Ответы

Ответ 1

Одним из дополнительных преимуществ использования ThreadPoolTaskExecutor весны является то, что он хорошо подходит для управления и мониторинга (например, через JMX), предоставляя несколько полезных атрибутов: "corePoolSize", "maxPoolSize", "keepAliveSeconds" (все поддерживающие обновления во время выполнения); "poolSize", "activeCount".

кроме того, он, очевидно, прост в использовании, если у вас уже есть весенние инъекции, реализованные в вашем приложении. используя его, вы можете напрямую вводить пул потоков путем инъекции сеттера, как показано ниже:

<bean id="taskExecutor"
    class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="5" />
    <property name="maxPoolSize" value="10" />
    <property name="WaitForTasksToCompleteOnShutdown" value="true" />
</bean> 

ThreadPoolTaskExecutor Doc

с другой стороны, ExecutorService CachedThreadPool - хорошая утилита для обмена вашими последними используемыми потоками (до 60 секунд). Важно отметить, что CachedThreadPool не является отдельным классом своего метода (newCachedThreadPool()).

CachedThreadPool Doc

Ответ 2

После Googling вы получите следующее:

ExecutorService

Интерфейс java.util.concurrent.ExecutorService представляет собой механизм асинхронного выполнения, который способен выполнять задачи в фоновом режиме. Таким образом, ExecutorService очень похож на пул потоков. Фактически, реализация ExecutorService, присутствующая в пакете java.util.concurrent, представляет собой реализацию пула потоков.

ThreadPoolTaskExecutor

Эта реализация может использоваться только в среде Java 5, но также является наиболее часто используемой в этой среде. Он предоставляет свойства bean для настройки java.util.concurrent.ThreadPoolExecutor и обертывает его в TaskExecutor. Если вам нужно что-то продвинутое, например ScheduledThreadPoolExecutor, рекомендуется использовать ConcurrentTaskExecutor.