java - FixedThreadPool 和 ThreadPoolTaskExecutor 有什么区别?
问题描述
使用以下配置配置线程池是否有区别:
Executors.newFixedThreadPool(50);
与做:
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(50);
executor.setThreadNamePrefix("thread-pool");
executor.initialize();
我对在运行时配置线程池不感兴趣(我认为这是使用的主要驱动程序ThreadPoolTaskExecutor
)。
解决方案
ThreadPoolTaskExecutor
是 Spring 框架中的一个类。另一方面,Executors::newFixedThreadPool
创建一个标准ThreadPoolExecutor
线程池,该线程池来自标准 Java,并且从 Java 5 开始可用。
来自ThreadPoolTaskExecutor的文档:
JavaBean 允许配置
ThreadPoolExecutor
in bean 样式(通过其“corePoolSize”、“maxPoolSize”、“keepAliveSeconds”、“queueCapacity”属性)并将其公开为 SpringTaskExecutor
。……
这个类实现了 Spring 的
TaskExecutor
接口和Executor
接口,前者是主要接口,另一个只是作为次要的方便。出于这个原因,异常处理遵循TaskExecutor
合同而不是Executor
合同,特别是关于TaskRejectedException
.
请注意,它ThreadPoolTaskExecutor
实现了许多 Spring 接口,例如 Aware
、BeanNameAware
、DisposableBean
,InitializingBean
这使得使用 Spring bean 等池更容易。
另请查看Karol Dowbecki 的回答,该回答正确指出了这些池参数的差异。
推荐阅读
- excel - 当数据来自另一张表时,基于用户表单的自动填充表
- android - FloatingActionButton 未打开对话框
- github - 自动创建拉取请求
- php - Docusign - API 连接 JWT - 需要同意
- c# - 如何在“Listview”中的最后一首歌曲之后停止播放音乐
- c# - 我正在尝试使用带有回归的 ML.NET 创建一个简单的神经网络,它返回指定的数字,但它返回一个不同的数字
- c++ - 将数据从文件 (.csv) 插入变量的功能不起作用
- r - 在R中打开带有日期和时间的excel文件
- symfony - Symfony - API 平台 - Vich Uploader 和漏洞问题
- r - R/dplyr:汇总数据而不分组