Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 当类';主线程完成?_Java_Multithreading - Fatal编程技术网

Java 当类';主线程完成?

Java 当类';主线程完成?,java,multithreading,Java,Multithreading,假设您有一个在应用程序主线程中初始化的ScheduledExecutorService,我们将计划作业添加到此服务。如果主线程完成,ScheduledExecutorService是否会自动停止创建新线程?这取决于执行器的底层线程是否是守护进程线程 在默认配置中,情况并非如此。这意味着当到达main的末尾时,执行器不会停止。这也意味着执行器仍然可以创建新线程 但是,如果执行器使用守护进程线程,那么如果没有其他非守护进程线程,应用程序将终止。只需测试它就可以得到答案。类完成是什么意思?请发布您的代

假设您有一个在应用程序主线程中初始化的
ScheduledExecutorService
,我们将计划作业添加到此服务。如果主线程完成,ScheduledExecutorService是否会自动停止创建新线程?

这取决于执行器的底层线程是否是守护进程线程

在默认配置中,情况并非如此。这意味着当到达main的末尾时,执行器不会停止。这也意味着执行器仍然可以创建新线程


但是,如果执行器使用守护进程线程,那么如果没有其他非守护进程线程,应用程序将终止。

只需测试它就可以得到答案。类完成是什么意思?请发布您的代码您的意思是,如果应用程序的主线程停止,由
ScheduledExecutorService
触发的任何线程都将仍然处于活动状态?@luigimendoza是的,这基本上就是我的意思user3218114我遇到了错误,我的代码很难发布,我想我找到了错误,只是想确认我是否找到了。这并不像测试它那样简单——创建一个新的main方法来运行,该方法添加了将在main方法返回后完成/运行的任务。这是非常容易测试的。此外,
ScheduledExecutorService
与一组特定的线程一起工作。它不会根据需要创建线程,比如@LuiggiMendoza ScheduledThreadPoolExecutor的corePoolSize是“池中要保留的线程数,即使它们是空闲的,除非设置了allowCoreThreadTimeOut”。ScheduledThreadPoolExecutor是ThreadPoolExecutor的子类,它将Integer.MAX_值传递给超级构造函数。这意味着它可以根据需要创建任意多的线程。这个答案是错误的。其他线程不会因为主线程死亡而死亡,除非主线程是唯一的非守护线程。请看@Raedwald,我没有这样说,但我补充了一个澄清。