2014-07-23 49 views
15

什么是使用春ThreadPoolTask​​Executor类和Java的ExecutorService cachedthreadpool

ThreadPoolTaskExecutor和Java Executorservicecachedthreadpool即使春天是Java并发的包装的优点和缺点。

只想知道使用它们的灵活性。

+5

似乎是一个很好的问题谷歌。 –

+4

它们是一样的:ThreadPoolExecutor是ExecutorService的一个实例。你应该阅读javadoc。 –

+1

如果您使用'Spring'开发App,那么使用[ThreadPoolTask​​Executor](http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/scheduling/concurrent/ThreadPoolTask​​Executor.html ),否则使用[Executorservice](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ExecutorService.html),因为它将独立于'Spring'并可用于其他任何地方。 – Ambrish

回答

11

一种使用弹簧的ThreadPoolTask​​Executor类的附加优点是它非常适合用于管理和监控(例如通过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:通过它,你可以通过Setter注入直接注入线程池如下图所示秒)。指出CachedThreadPool不是单独的类 其方法(newCachedThreadPool())是很重要的。

CachedThreadPool Doc

+0

我看到到处corePoolSize的 “值= ”5“” maxPoolSize值“value =”10“not other no,它背后的逻辑是什么? –

+0

为什么我不能做同样的事情,例如原始的java.util.concurrent.ThreadPoolExecutor?它还公开了setter/getter方法我不明白为什么Spring的ThreadPoolTask​​Executor在JMX(我没有使用它)或XML属性配置时有帮助,当它具有“public void setMaxPoolSize(int maxPoolSize)”时,而原始的java.util.concurrent.ThreadPoolExecutor也有“公共无效setMaximumPoolSize(INT maximumPoolSize)”我的意思是,它增加 – Ruslan

+0

至于“在运行时支持更新”什么样的价值。 - 不生java.util.concurrent.ThreadPoolExecutor中支持它,以及根据?例如,javadoc ,setMaximumPoolSize()它会处理这种情况。 – Ruslan

2

谷歌搜索后,您将获得以下:

的ExecutorService

的java.util.concurrent.ExecutorService中接口表示异步执行机制,它能够在后台执行任务。因此ExecutorService与线程池非常相似。实际上,java.util.concurrent包中存在的ExecutorService的实现是一个线程池实现。

ThreadPoolTask​​Executor类

这个实现只能在Java 5环境中使用,但也是最常用的一个在那样的环境。它公开用于配置java.util.concurrent.ThreadPoolExecutor的bean属性并将其包装在TaskExecutor中。如果你需要一些高级的东西,如ScheduledThreadPoolExecutor,建议你改用ConcurrentTaskExecutor。

+2

[ThreadPoolTask​​Executor的最新Spring(4.1.x)文档](http://docs.spring。IO /弹簧/文档/ 4.1.x的/ Javadoc的API /组织/ springframework的/调度/并发/ ThreadPoolTask​​Executor.html)具有到Java 5.没有参考 – herman

相关问题