首页 > 解决方案 > FixedThreadPool 和 ThreadPoolTask​​Executor 有什么区别?

问题描述

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

Executors.newFixedThreadPool(50);

与做:

ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(50);
executor.setThreadNamePrefix("thread-pool");
executor.initialize();

我对在运行时配置线程池不感兴趣(我认为这是使用的主要驱动程序ThreadPoolTaskExecutor)。

标签: javaspringmultithreadingthreadpool

解决方案


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

来自ThreadPoolTask​​Executor的文档:

JavaBean 允许配置ThreadPoolExecutorin bean 样式(通过其“corePoolSize”、“maxPoolSize”、“keepAliveSeconds”、“queueCapacity”属性)并将其公开为 Spring TaskExecutor

……

这个类实现了 Spring 的TaskExecutor接口和Executor接口,前者是主要接口,另一个只是作为次要的方便。出于这个原因,异常处理遵循TaskExecutor合同而不是Executor合同,特别是关于TaskRejectedException.

请注意,它ThreadPoolTaskExecutor实现了许多 Spring 接口,例如 AwareBeanNameAwareDisposableBeanInitializingBean这使得使用 Spring bean 等池更容易。

另请查看Karol Dowbecki 的回答,该回答正确指出了这些池参数的差异。


推荐阅读