首页 > 解决方案 > 我应该使我的 Executor 服务实例在类级别上定义为静态吗?

问题描述

我有一个类,我在我的线程池中使用具有固定数量线程的 Executor Service,这些线程执行多个短期运行任务。

我的代码是这样的:

public class MessageConsumer{

private ExecutorService executor = Executors.newFixedThreadPool(4);

main(){
.....
}

receiveMessage(String message){
try{
     executor.execute(new FileWriterTask(message))
     ......
   }catch(Exception e){
       ........
       executor.shutDown();
       .........
   }
}

.....
}

如您所见,我已经在类级别定义并实例化了我的 Executor Service 并在方法中使用它。我已将其设为私有,并且无法从外部访问它。

我想知道是否也应该将我的 Executor 服务实例标记为静态,因为这意味着每个类只有一个实例。目前,我猜每个班级只有一个。什么是好的做法?声明 Executor Service 的好设计是什么?

标签: javastaticexecutorservice

解决方案


如果您正在创建MessageConsumer类的多个实例,那么您可能有一个共享ExecutorService实例的用例,因此您可以将其设为静态。

但是,如果您只创建 的实例MessageConsumer,则不要使用静态,这样您就可以进行依赖注入,从而拥有可测试的组件。


推荐阅读