在同一类的线程之间共享记录器



如果在实现Runnable:的类中有一个log4j记录器

MyTask implements Runnable {
  private static final Logger log = Logger.getLogger(MyTask.class);
  ...
}

如果我创建了这个Runnable的许多实例,并将它们提交给多核机器上的ExecutorService,在那里它们并行运行,并且它们都写入静态Logger,这似乎存在争用的风险。更好的模式似乎是:

MyTask implements Runnable {
  private final Logger log;
  MyTask(String name) {
    log = Logger.getLogger(name);
  }
  ...
}   

所以我的问题。。。这是一种你已经使用或认为有必要的模式吗?因为目前我只是在假设?

感谢

在多个线程之间共享静态类记录器是非常典型的。通常,记录器有一个已经同步的底层PrintStream,因此创建多个Logger是不必要和浪费的。

最新更新