我已将HttpServletRequest
传递给servlet中的另一个方法。我可以保持servlet线程安全吗?以下代码是否使用er()
方法进行线程安全?
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().append("Your session Id: ").append(er(request));
}
public String er(HttpServletRequest request){
return request.getSession().getId();
}
答案 0 :(得分:1)
完全没问题,你没有修改Servlet本身的任何状态,servlet生命周期创建一个servlet实例并调用init()
方法,任何其他请求都来自同一个实例。所以如果你没有任何不受保护的实例变量,你应该没问题。
答案 1 :(得分:-1)
因为request.getSession()
可选择创建一个会话,所以答案是你可能有竞争条件,其中"同时"来自同一客户端的调用可能会导致为该客户端创建不同的会话对象,从而返回不同的ID。
另见here