【问题标题】:Sharing a Logger Between Threads of the Same Class在同一类的线程之间共享一个记录器
【发布时间】:2012-02-29 19:23:00
【问题描述】:

如果我在实现 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);
  }
  ...
}   

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

谢谢

【问题讨论】:

  • 您要解决什么问题?忽略过早的优化问题,除非这些记录器都有不同的底层目标,否则输出可能无论如何都会在某个级别同步(如果不是,则交错输出的混乱无法使用)。

标签: java multithreading logging concurrency


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-14
    • 2012-11-14
    • 2017-03-12
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多