Java ExecutorService JVM不';不要终止
我不明白为什么我要打电话给executorService.shutdown() 显式终止Executor服务 如果我不调用shutdown(),那么JVM将不会自行终止 我的程序有什么问题,或者我缺少什么概念?Java ExecutorService JVM不';不要终止,java,multithreading,executorservice,java.util.concurrent,Java,Multithreading,Executorservice,Java.util.concurrent,我不明白为什么我要打电话给executorService.shutdown() 显式终止Executor服务 如果我不调用shutdown(),那么JVM将不会自行终止 我的程序有什么问题,或者我缺少什么概念? public class ExecutorServiceExample { public static class Task1 implements Runnable { @Override public void run() {
public class ExecutorServiceExample {
public static class Task1 implements Runnable {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Message from Task1 :"
+ Thread.currentThread().getName());
}
}
public static class Task2 implements Runnable {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Message from Task2 :"
+ Thread.currentThread().getName());
}
}
public static class Task3 implements Runnable {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Message from Task3 :"
+ Thread.currentThread().getName());
}
}
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(10);
Future future1 = executorService.submit(new Task1());
Future future2 = executorService.submit(new Task2());
Future future3 = executorService.submit(new Task3());
}
}
输出:
来自Task2的消息:池1线程2
来自Task1的消息:池1线程1
来自Task3的消息:池1线程3
JVM仍处于活动状态。如果我调用shutdown(),那么只有JVM会死亡。根据:
Java虚拟机将继续执行线程,直到发生以下任一情况:
- 类运行时的exit方法已被调用,并且安全管理器已允许执行exit操作
- 通过调用run方法返回或抛出传播到run方法之外的异常,所有非守护进程线程都已死亡
您必须在执行器上调用
shutdown
,或者使用自定义(例如使用)创建它,线程工厂将在其中将新线程配置为守护进程线程。但是当这些非守护进程线程完成run()的执行时,这些非守护进程线程将死亡。但我的情况并非如此。有什么建议吗?如果您使用ThreadFactory创建守护进程线程,那么当JVM退出时,提交的任务将不会完全执行。在问题的示例中,此选项将导致没有消息打印。@JohnRambo Non-deamon executor的线程在Runnable执行完成后不会死亡。他们等待提交另一个Runnable来执行。因为这就是它的工作方式,为什么不想遵循文档?因为文档中没有明确提到它。