我正在开发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<>();
}
};
如果仍要使用
put
或get
,则可以通过以下方式定义它们: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/