将属性添加到当前Java线程

时间:2011-04-10 01:16:09

标签: java multithreading

如何在Java中将“attributes”设置为当前Thread,我想设置键值并在另一个地方获取值,但是在同一个线程中。喜欢这个http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/MDC.html

2 个答案:

答案 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