使用以下配置配置线程池之间是否有区别:
go.mod
与之相反:
Executors.newFixedThreadPool(50);
我对在运行时配置线程池不感兴趣(我认为这是使用ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(50);
executor.setThreadNamePrefix("thread-pool");
executor.initialize();
的主要驱动程序)。
答案 0 :(得分:6)
ThreadPoolTaskExecutor
是Spring Framework中的一个类。另一方面,Executors::newFixedThreadPool
创建了一个标准ThreadPoolExecutor
线程池,该线程池来自标准Java,从Java 5开始可用。
摘自ThreadPoolTaskExecutor的文档:
允许以bean样式配置
ThreadPoolExecutor
的JavaBean(通过其“ corePoolSize”,“ maxPoolSize”,“ keepAliveSeconds”,“ queueCapacity”属性)并将其作为SpringTaskExecutor
公开。 / p>....
该类实现Spring的
TaskExecutor
接口和Executor
接口,前者是主要接口,另一个只是次要便利。因此,异常处理遵循TaskExecutor
合同而不是Executor
合同,尤其是关于TaskRejectedException
的合同。
请注意,ThreadPoolTaskExecutor
实现了许多Spring接口,例如Aware
,BeanNameAware
,DisposableBean
,InitializingBean
,这使得使用Spring这样的池变得更加容易豆。
还可以查看Karol Dowbecki's answer,它正确指出了这些池参数的差异。
答案 1 :(得分:5)
在您的示例中,Spring的ThreadPoolTaskExecutor
将创建ThreadPoolExecutor
,其中corePoolSize
为50,maxPoolSize
of Integer.MAX_VALUE
和keepAlive
of 60 seconds。
与此同时,Executors.newFixedThreadPool(50)
会将corePoolSize
和maxPoolSize
都设置为50秒和keepAlive
为0秒(请参阅Java源代码)。