Java将数据与当前线程关联

时间:2015-06-30 14:12:32

标签: java servlets

我正在开发web应用程序,它部署在apache tomcat web服务器上。我想将数据与http请求的当前线程相关联。为此我创建了以下类:

public class ThreadData {

    private static final Map<Long, Map<String, String>> data = new HashMap<>();

    public static Map<String, String> getDataMap(long threadId) {
        if (data.get(threadId) == null) {
            data.put(threadId, new HashMap<String, String>());
        }

        return data.get(threadId);
    }

    public static void put(String key, String value) {
        long threadId = Thread.currentThread().getId();
        getDataMap(threadId).put(key, value);
    }

    public static String get(String key) {
        long threadId = Thread.currentThread().getId();
        return getDataMap(threadId).get(key);
    }
}

我想知道这种解决方案是否对这个问题是正确和安全的。

1 个答案:

答案 0 :(得分:2)

{1}}课程涵盖了您要实现的目标,在您的情况下,它将是

ThreadLocal

如果您仍想使用ThreadLocal<Map<String, String>> data = new ThreadLocal<Map<String, String>>() { @Override protected Map<String, String> initialValue() { return new HashMap<>(); } }; put,则可以通过以下方式定义它们:

get