如何在 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() 中提交的任务可能需要等待空闲工作线程。