如果在servlet的服务方法下创建HashMap
而不是线程安全?
它是一个基于用户的Web应用程序,不同的用户将登录并访问servlet,从而根据他们的组访问他们的特定地图数据。
service(request,response) {
HashMap h = new HashMap();
h.put(keyfromserver,valuefromserver); // this is in for loop
}
答案 0 :(得分:1)
如果在servlet的service方法中创建了这样的对象,并假设service
方法通过放置其他方法(例如doGet
或doPost
)使程序员可以使用此对象。在请求或响应对象中映射时,此对象仍然是线程安全的,因为它是在请求执行期间创建的,而服务方法只为特定线程提供服务。
如果在另一个线程中发出了其他请求,则意味着另一个服务方法的调用,因此它将实例化另一个映射对象。
如果要将对象的引用保留在给定请求的范围之外,例如将其保存在静态字段中或将其保存到共享会话中,则会使对象不安全。在这种情况下,对象的使用不仅限于请求,还包括多个其他请求,可能发生在不同的线程中。