ExecutorService应该是静态的还是全局的

byl*_*nan 11 java multithreading executorservice

我想在整个应用程序中使用相同的线程池.为此,我可以让ExecutorService静态和全局,这样我可以调用ThreadUtil.executorService得到ExecutorService,当我需要它.

public class ThreadUtil {
    public static final ExecutorService executorService = Executors.newCachedThreadPool();
}
Run Code Online (Sandbox Code Playgroud)

可以像这样实例化多个线程池吗?

另外,我的应用程序是TCP服务器.如果我不知道游泳池应该有多大,可以简单地使用newCachedThreadPool吗?

Jea*_*ard 5

当在程序中的任何地方使用具有相同属性的实例时,将其声明为 static 和 final 而不是每次都重新创建实例是合乎逻辑的,但我个人会选择单例模式而不是直接公开访问实例。

至于您的第二个查询,我认为没有任何问题。文档的第一句话newCachedThreadPool

创建一个线程池,根据需要创建新线程

由于您不知道将创建多少个线程,因此这是最合乎逻辑的选择。

请注意,newCachedThreadPool当旧线程可用时将重新使用它们以提高性能。