FixedThreadPool和ThreadPoolTask​​Executor有什么区别?

时间:2019-07-29 19:21:52

标签: java spring multithreading threadpool

使用以下配置配置线程池之间是否有区别:

go.mod

与之相反:

Executors.newFixedThreadPool(50);

我对在运行时配置线程池不感兴趣(我认为这是使用ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(50); executor.setThreadNamePrefix("thread-pool"); executor.initialize(); 的主要驱动程序)。

2 个答案:

答案 0 :(得分:6)

ThreadPoolTaskExecutor是Spring Framework中的一个类。另一方面,Executors::newFixedThreadPool创建了一个标准ThreadPoolExecutor线程池,该线程池来自标准Java,从Java 5开始可用。

摘自ThreadPoolTaskExecutor的文档:

  

允许以bean样式配置ThreadPoolExecutor的JavaBean(通过其“ corePoolSize”,“ maxPoolSize”,“ keepAliveSeconds”,“ queueCapacity”属性)并将其作为Spring TaskExecutor公开。 / p>      

....

     

该类实现Spring的TaskExecutor接口和Executor接口,前者是主要接口,另一个只是次要便利。因此,异常处理遵循TaskExecutor合同而不是Executor合同,尤其是关于TaskRejectedException的合同。

请注意,ThreadPoolTaskExecutor实现了许多Spring接口,例如AwareBeanNameAwareDisposableBeanInitializingBean,这使得使用Spring这样的池变得更加容易豆。

还可以查看Karol Dowbecki's answer,它正确指出了这些池参数的差异。

答案 1 :(得分:5)

在您的示例中,Spring的ThreadPoolTaskExecutor将创建ThreadPoolExecutor,其中corePoolSize为50,maxPoolSize of Integer.MAX_VALUEkeepAlive of 60 seconds

与此同时,Executors.newFixedThreadPool(50)会将corePoolSizemaxPoolSize都设置为50秒和keepAlive为0秒(请参阅Java源代码)。

相关问题