1
如果非要在實現Runnable的類的log4j的記錄:同一類的線程之間共享一個Logger
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);
}
...
}
所以我的問題...這是你已經使用或找到所需的圖案,此刻我是純粹hypothesising?
謝謝
你想解決什麼問題?忽略過早的優化問題,除非這些記錄器都具有不同的基礎目標,否則輸出可能會在某個級別同步(如果不是,則交織輸出不可用)。 – 2012-02-29 19:31:31