如何在 Java 中使用 ExecutorService(一个池 Executors.newFixedThreadPool() 或多个 Executors.newSingleThreadExecutor())
How can I use a ExecutorService in Java (One pool Executors.newFixedThreadPool() or several Executors.newSingleThreadExecutor())
如果方法 someMethod() 被多次调用,如何最好地使用 executorService:
我现在在用:
public void someMethod() {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future future = executorService.submit(() -> method());
}
或者我应该这样使用它
ExecutorService executorService = Executors.newFixedThreadPool(8);
public void someMethod() {
Future future = executorService.submit(() -> method());
}
线程池执行器的创建是一个代价高昂的操作,你还需要在不需要时停止线程池(否则会阻止 JVM 退出)。
所以第二个选项更可取。
共享 thead 池的唯一缺点是某些其他代码可能会提交较长的 运行 任务,而您在 someMethod()
中提交的任务可能需要等待空闲工作线程。
如果方法 someMethod() 被多次调用,如何最好地使用 executorService:
我现在在用:
public void someMethod() {
ExecutorService executorService = Executors.newSingleThreadExecutor();
Future future = executorService.submit(() -> method());
}
或者我应该这样使用它
ExecutorService executorService = Executors.newFixedThreadPool(8);
public void someMethod() {
Future future = executorService.submit(() -> method());
}
线程池执行器的创建是一个代价高昂的操作,你还需要在不需要时停止线程池(否则会阻止 JVM 退出)。
所以第二个选项更可取。
共享 thead 池的唯一缺点是某些其他代码可能会提交较长的 运行 任务,而您在 someMethod()
中提交的任务可能需要等待空闲工作线程。