来自sessionCreated()
的{{1}}方法是否会自动与HttpSessionListener
通话同步?特别是,我想知道在request.getSession()
方法中设置会话属性是否可以线程安全,并在servlet中检索sessionCreated()
的属性?
例如,具有
request.getSession().getAttribute("something")
在@Override
public void sessionCreated(HttpSessionEvent se) {
se.getSession().setAttribute("something", new Something());
}
中,并且
HttpSessionListener
<{1>} Something something = (Something) request.getSession().getAttribute("something");
synchronized(something){
// do anything with this "something" object
}
doGet()
方法内部我关心的一点是,如果此HttpServlet?
方法未与sessionCreated()
自动同步requested.getSession()
返回的值getAttribute("something")
1}}可以是null
。
答案 0 :(得分:0)
这两个方法调用至少在Tomcat中在同一线程中执行。我使用log4j通过打印线程ID对其进行了检查。因此,至少在Tomcat中,上述方法调用的组合是线程安全的。