[英]Java application thread creation
我正在研究Java應用程序。 我們正在使用Spring,並且該應用程序運行WebSphere應用程序服務器。 在整個應用程序中,我們維護使用Spring在應用程序內創建的多個線程池。 像下面一樣,到目前為止,我們還沒有遇到任何問題。
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="maxPoolSize" value="100"/>
<property name="corePoolSize" value="10"/>
</bean>
但是我在閱讀Spring框架參考文檔時遇到了以下段落,
34.3.3 TaskScheduler的實現
與Spring的TaskExecutor抽象一樣,TaskScheduler的主要好處是不需要將依賴於調度行為的代碼與特定的調度程序實現耦合。 當在不應該由應用程序本身直接創建線程的Application Server環境中運行時,此提供的靈活性特別重要。 對於這種情況,Spring提供了一個TimerManagerTaskScheduler,它委托給CommonJ TimerManager實例,該實例通常使用JNDI查找來配置。
REF。 https://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.html
所以我的問題是,如果我不在乎訪問Java EE上下文信息,還有什么其他原因使用托管線程池? 我基本上想知道什么是最佳實踐,以及是否完全不能接受應用程序托管線程。
通常,諸如WebSphere之類的企業服務器上的線程池(以及JDBC連接)不應由應用程序管理,而應由服務器本身管理。 Spring僅在您的應用程序和服務器的線程池模型之間提供接口。
在服務器端配置線程池的主要好處是效率:在過去,通常將多個應用程序部署到同一服務器上。 使用共享線程池,可以利用服務器的所有資源。 如今,考慮到微服務體系結構,將多個應用程序保留在同一Java服務器上被認為是不好的做法。 因此,只需將此類線程池視為舊技術堆棧的一部分即可。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.