如何使java执行器具有相同的线程?

如何使java执行器具有相同的线程?,java,multithreading,threadpool,executorservice,Java,Multithreading,Threadpool,Executorservice,对于一些建议,我需要创建一个始终有一个相同线程的Executor Executors.newFixedThreadPool(1); Executors.newScheduledThreadPool(1); 上面的示例创建一个线程池,但当工作完成时,线程将结束,如果将新任务传递给执行器,则再次创建一个新线程池 所以我想出了这样的办法: new ThreadPoolExecutor(1,1,Long.MAX_VALUE, TimeUnit.DAYS, new LinkedBlockingQueue

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

Executors.newFixedThreadPool(1);
Executors.newScheduledThreadPool(1);
上面的示例创建一个线程池,但当工作完成时,线程将结束,如果将新任务传递给执行器,则再次创建一个新线程池

所以我想出了这样的办法:

new ThreadPoolExecutor(1,1,Long.MAX_VALUE, TimeUnit.DAYS, new LinkedBlockingQueue<>());
new ThreadPoolExecutor(1,1,Long.MAX_值,TimeUnit.DAYS,new LinkedBlockingQueue());
这似乎有效,但我怀疑这是否是正确的方法。有人能展示一种更好/正确的方式吗

Executors.newSingleThreadExecutor();
来自(我的):

创建一个
执行器
,该执行器使用单个工作线程在无界队列上运行(但是请注意,如果此单线程在关机前的执行过程中由于故障而终止,则在需要执行后续任务时,将替换一个新线程。)任务保证按顺序执行,并且在任何给定时间都不会有多个任务处于活动状态。与其他等效的
newFixedThreadPool(1)
不同,返回的执行器保证不可重新配置以使用其他线程


@LunaVulpo it保证在第一次失败之前使用单个线程。我可以理解为什么您可能会担心销毁和重新创建工作线程的开销,但为什么工作线程的标识对您的应用程序很重要?