Java ConcurrentHashMap是在Servlet内部使用的可靠选择吗?

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

我需要映射Servlet中的对象。ConcurrentHashMap是可靠的选择吗?是否所有请求都会从映射中获取请求的对象,还是会失败

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
。您可以使用普通的old
HashMap
。更好的方法是使用
集合将其转换为不可修改的映射。不可修改的映射在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
);