【发布时间】: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