如何在Java中将“attributes
”设置为当前Thread
,我想设置键值并在另一个地方获取值,但是在同一个线程中。喜欢这个http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html
答案 0 :(得分:13)
我认为您不能在Java中为任何给定线程添加属性,但您可以使用ThreadLocal
实例来存储每个线程的任何特殊信息。
http://download.oracle.com/javase/6/docs/api/java/lang/ThreadLocal.html
答案 1 :(得分:5)
以下是@ edalorzo答案的示例代码:
import java.util.HashMap;
import java.util.Map;
public class ThreadAttributes {
private static ThreadLocal<Map<String, String>> threadAttrs = new ThreadLocal<Map<String, String>>() {
@Override
protected Map<String, String> initialValue() {
return new HashMap<String, String>();
}
};
public static String get(String key) {
return threadAttrs.get().get(key);
}
public static void set(String key, String value) {
threadAttrs.get().put(key, value);
}
}
要使用它:
ThreadAttributes.get("attribute"); //to get an attribute
ThreadAttributes.set("attribute", "toValue"); //to set an attribute
警告:如果您的应用程序创建了大量线程但未重复使用它们,则此代码可能会泄漏HashMap
。