2014-07-23 82 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

相關問題