servlet的服务方法中的HashMap

时间:2014-05-07 19:56:34

标签: java servlets collections hashmap thread-safety

如果在servlet的服务方法下创建HashMap而不是线程安全? 它是一个基于用户的Web应用程序,不同的用户将登录并访问servlet,从而根据他们的组访问他们的特定地图数据。

service(request,response) { 
  HashMap h = new HashMap();
  h.put(keyfromserver,valuefromserver);   // this is in for loop
}

1 个答案:

答案 0 :(得分:1)

如果在servlet的service方法中创建了这样的对象,并假设service方法通过放置其他方法(例如doGetdoPost)使程序员可以使用此对象。在请求或响应对象中映射时,此对象仍然是线程安全的,因为它是在请求执行期间创建的,而服务方法只为特定线程提供服务。

如果在另一个线程中发出了其他请求,则意味着另一个服务方法的调用,因此它将实例化另一个映射对象。

如果要将对象的引用保留在给定请求的范围之外,例如将其保存在静态字段中或将其保存到共享会话中,则会使对象不安全。在这种情况下,对象的使用不仅限于请求,还包括多个其他请求,可能发生在不同的线程中。