Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Executors的退出策略是什么_Java_Multithreading_Concurrency_Executorservice - Fatal编程技术网

Java Executors的退出策略是什么

Java Executors的退出策略是什么,java,multithreading,concurrency,executorservice,Java,Multithreading,Concurrency,Executorservice,我是java并发新手,所以这可能是一个已经回答了很多次的问题,或者太明显了,我可能遗漏了一些东西 我以任务的形式运行,如下所示: Executors.newSingleThreadExecutor().execute(task) 我的问题是,当它执行任务的run方法结束时,为什么它不退出,或者为什么线程仍然处于活动状态?我的理解是,一旦线程run()完成,线程就不再存在,对吗?newSingleThreadExecutor返回一个ExecutorService,它使用一个线程-它仍然可以执行多

我是java并发新手,所以这可能是一个已经回答了很多次的问题,或者太明显了,我可能遗漏了一些东西

我以任务的形式运行,如下所示:

Executors.newSingleThreadExecutor().execute(task)

我的问题是,当它执行任务的run方法结束时,为什么它不退出,或者为什么线程仍然处于活动状态?我的理解是,一旦线程
run()
完成,线程就不再存在,对吗?

newSingleThreadExecutor
返回一个
ExecutorService
,它使用一个线程-它仍然可以执行多个任务。它不会退出,因为您可能希望提供更多任务

您可以使用:

ExecutorService service = Executors.newSingleThreadExecutor();
service.execute(task);
service.shutdown();

在任务执行后将其关闭。

线程保持活动状态,因为其生命周期与分配给执行者的任务的生命周期无关;看看:


您会发现,在内部,返回的ExecutorService使用单个线程按顺序运行分配给它的任务,如果您的一个任务杀死了原来的一个,则可能会实例化一个新线程。

我看到该任务与线程生命周期是分开的。谢谢,我们将阅读javadoc