我正在开发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);
    }
}


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

最佳答案

您要实现的目标已被ThreadLocal类覆盖,在您的情况下,

ThreadLocal<Map<String, String>> data = new ThreadLocal<Map<String, String>>() {
    @Override
    protected Map<String, String> initialValue() {
        return new HashMap<>();
    }
};


如果仍要使用putget,则可以通过以下方式定义它们:

public static void put(String key, String value) {
    data.get().put(key, value);
}

public static String get(String key) {
    return data.get().get(key);
}

关于java - Java将数据与当前线程关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31140711/

10-11 02:59