首页 > 解决方案 > 如何让java执行器具有相同的线程?

问题描述

对于某些提议,我需要创建一个Executor始终具有一个相同线程的线程。

Executors.newFixedThreadPool(1);
Executors.newScheduledThreadPool(1);

上面的示例创建了一个线程池,但是当工作完成时,如果有新任务传递给执行程序,线程将结束并再次创建一个新线程。

所以我想出了这样的事情:

new ThreadPoolExecutor(1,1,Long.MAX_VALUE, TimeUnit.DAYS, new LinkedBlockingQueue<>());

似乎可行,但我怀疑这是否是正确的方法。有人可以展示更好/正确的方法吗?

标签: javamultithreadingthreadpoolexecutorservice

解决方案


Executors.newSingleThreadExecutor();

文档(强调我的):

创建一个Executor使用单个工作线程在无界队列上操作的线程。(但请注意,如果该单线程在关闭前的执行过程中因失败而终止,则如果需要执行后续任务,则新线程将取代它。)任务保证按顺序执行,并且不会有多个任务处于活动状态在任何给定时间。与其他等效newFixedThreadPool(1)的不同,返回的执行程序保证不能重新配置以使用额外的线程。


推荐阅读