Java ConcurrentHashMap是在Servlet内部使用的可靠选择吗?
我需要映射Servlet中的对象。ConcurrentHashMap是可靠的选择吗?是否所有请求都会从映射中获取请求的对象,还是会失败Java ConcurrentHashMap是在Servlet内部使用的可靠选择吗?,java,servlets,hashmap,Java,Servlets,Hashmap,我需要映射Servlet中的对象。ConcurrentHashMap是可靠的选择吗?是否所有请求都会从映射中获取请求的对象,还是会失败 public class MyServlet extends HttpServlet { private Map<String, Object> map = new ConcurrentHashMap<String, Object>(); public void doGet(HttpServletRequest req
public class MyServlet extends HttpServlet {
private Map<String, Object> map = new ConcurrentHashMap<String, Object>();
public void doGet(HttpServletRequest request, HttpServletResponse response) {
// use map
map.get("myObjectName");
}
}
公共类MyServlet扩展了HttpServlet{
私有映射映射=新的ConcurrentHashMap();
public void doGet(HttpServletRequest请求、HttpServletResponse响应){
//使用地图
map.get(“myObjectName”);
}
}
答案取决于该方法的其余部分是否改变映射
无法保证对地图所做的更改会像所写的那样有效
在servlet中使用这样的共享状态通常不是一个好主意。它们用于处理HTTP请求。最好把这个功能转移到一个能完成这项工作的服务上。 ,因为map只是在启动时初始化的,所以你应该考虑使用番石榴:
ConcurrentHashMap
的目的是允许在不锁定的情况下进行检索。它适用于多线程程序,这些程序具有大量的读操作和很少的写操作
你写的
servlet初始化后不会修改对象新手
如果这意味着在servlet初始化之后映射没有改变,那么您根本不需要
ConcurrentHashMap
。您可以使用普通的oldHashMap
。更好的方法是使用集合将其转换为不可修改的映射。不可修改的映射在servlet初始化后不会被修改。
private static final ImmutableMap<String, Object> MY_MAP = ImmutableMap
.<String, Object>builder()
.put("asdf", myObj1)
.put("qwerty", myObj2)
.build();
private static final ImmutableMap<String, Object> MY_MAP = ImmutableMap.of(
"asdf", myObj1,
"qwerty", myObj2
);