这个servlet线程安全吗?

时间:2016-01-10 11:40:17

标签: java servlets

我已将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();
}

2 个答案:

答案 0 :(得分:1)

完全没问题,你没有修改Servlet本身的任何状态,servlet生命周期创建一个servlet实例并调用init()方法,任何其他请求都来自同一个实例。所以如果你没有任何不受保护的实例变量,你应该没问题。

答案 1 :(得分:-1)

因为request.getSession()可选择创建一个会话,所以答案是你可能有竞争条件,其中"同时"来自同一客户端的调用可能会导致为该客户端创建不同的会话对象,从而返回不同的ID。

另见here