ThreadPoolExecutor 守护主线程
时间: 2023-07-17 17:59:46 浏览: 97
ThreadPoolExecutor 是 Java 中的一个线程池类,用于管理和执行多个线程任务。默认情况下,ThreadPoolExecutor 不会守护主线程,它会继续执行工作线程直到所有任务完成或显式地调用了 ThreadPoolExecutor 的 shutdown() 方法。
如果你想要在主线程退出时自动终止 ThreadPoolExecutor 中的所有工作线程,你可以使用 Java 的 Thread 的 setDaemon() 方法将工作线程设置为守护线程。守护线程是一种特殊类型的线程,当所有的非守护线程都结束时,守护线程会自动终止。
以下是一个示例代码,展示如何将 ThreadPoolExecutor 中的工作线程设置为守护线程:
```java
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize,
maximumPoolSize,
keepAliveTime,
TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<Runnable>()
);
for (int i = 0; i < 5; i++) {
Runnable task = new MyTask();
Thread thread = new Thread(task);
thread.setDaemon(true); // 设置为守护线程
executor.execute(thread);
}
executor.shutdown();
```
在上述代码中,创建了一个 ThreadPoolExecutor,并将工作线程设置为守护线程。注意,在设置守护线程之前,需要将任务包装为 Thread 对象,并将其传递给 executor.execute() 方法执行。
当主线程退出时,所有的守护线程会自动终止,包括 ThreadPoolExecutor 中的工作线程。这样可以避免工作线程继续执行而导致应用程序无法退出的情况。
阅读全文