Gdg*_*ers 8 java spring multithreading threadpool
使用以下配置配置线程池之间是否有区别:
Executors.newFixedThreadPool(50);
Run Code Online (Sandbox Code Playgroud)
与做:
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(50);
executor.setThreadNamePrefix("thread-pool");
executor.initialize();
Run Code Online (Sandbox Code Playgroud)
我对在运行时配置线程池不感兴趣(我认为这是使用的主要驱动程序ThreadPoolTaskExecutor)。
ThreadPoolTaskExecutor是Spring Framework的类。另一方面,Executors::newFixedThreadPool创建ThreadPoolExecutor来自标准Java 的标准线程池,并且从Java 5开始可用。
从ThreadPoolTaskExecutor的文档中:
允许配置
ThreadPoolExecutorin Bean样式的JavaBean (通过其“ corePoolSize”,“ maxPoolSize”,“ keepAliveSeconds”,“ queueCapacity”属性)并将其作为Spring公开TaskExecutor。....
此类实现Spring的
TaskExecutor接口以及该Executor接口,前者是主要接口,另一个仅是辅助便利。因此,异常处理遵循TaskExecutor合同而不是Executor合同,尤其是关于TaskRejectedException。
请注意,ThreadPoolTaskExecutor实现了许多春天接口喜欢 Aware,BeanNameAware,DisposableBean,InitializingBean这使得它更容易地工作,作为一个Spring bean这样的游泳池。
还可以看看Karol Dowbecki的答案,该答案正确指出了这些池参数上的差异。
在您的例子Spring的ThreadPoolTaskExecutor将创建一个ThreadPoolExecutor与corePoolSize50,maxPoolSize中Integer.MAX_VALUE和keepAlive60秒。
同时Executors.newFixedThreadPool(50)将corePoolSize和设置maxPoolSize为50 keepAlive秒和0秒(请参阅Java源代码)。
| 归档时间: |
|
| 查看次数: |
155 次 |
| 最近记录: |