我正在开发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);
}
}
我想知道这种解决方案是否对这个问题是正确和安全的。
答案 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