【发布时间】:2022-01-01 06:23:19
【问题描述】:
我正在学习多线程,我遇到了this SO post。
-
Executor 只是执行我们给它的东西。
-
ExecutorService 增加了启动、关闭以及等待和查看我们在 Executor(它扩展)之上提交以执行的作业状态的能力。
我仍在努力思考 Executor 和 ExecutorService 的使用。
- 什么情况下我会使用 Executor 而不是 ExecutorService?我可以在任何地方使用 ExecutorService 吗?
- 有没有办法为 Executor 的执行添加显式的
shutdown或者围绕它的一般做法是什么?
我使用Executor 的以下代码不会终止。这是使用 Executor 的正确方法还是我在这里遗漏了什么?如何正确终止代码?我知道 Executor 没有shutdown。那么这个程序是否预计不会终止?
import java.util.concurrent.*;
public class A {
public static void main(String[] args) {
Executor executor = Executors.newFixedThreadPool(3);
executor.execute(() ->
System.out.println("Executor Class: " +
Thread.currentThread().getId() + ", Name: " +
Thread.currentThread().getName()));
}
}
如果我用ExecutorService 替换上面的内容并添加shutdown,程序将正常终止。
import java.util.concurrent.*;
public class A {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(3);
executor.submit(() ->
System.out.println("ExecutorService Class: " +
Thread.currentThread().getId() + ", Name: " +
Thread.currentThread().getName()));
executor.shutdown();
}
}
【问题讨论】:
-
ExecutorService接口扩展了Executor接口。 ExecutorService 提供了一些额外的协调方法,例如 shutdown 和 awaitTermination。因此,它基于您的用例。作为一个好的做法,您可以随时使用ExecutorService
标签: java multithreading executorservice