是否有可能同时由多个线程访问会话范围的辅助bean?
servlet规范说,有可能:
执行请求线程的多个servlet可以具有对它的活动访问权限 会话对象同时出现。容器必须确保操纵 表示会话属性的内部数据结构在线程中执行 安全的方式。开发人员负责线程安全访问 属性对象本身。这将保护内部的属性集合 来自并发访问的HttpSession对象,消除了一个机会 应用程序导致该集合被破坏。
但是我不能让服务器(JBoss)为同一个会话使用不同的线程。当我打开多个选项卡并在一个选项卡中启动长时间运行的请求,然后在另一个选项卡中启动请求时,第二个选项卡必须等待响应,直到第一个选项卡中的操作完成为止。
我还通过在backing bean中使用断点阻塞线程来验证这一点。在我恢复线程之前,无法在同一会话的其他选项卡中执行任何操作。
尽管如此,我们在生产日志中有一些奇怪的例外,到目前为止,我们唯一可能的解释是,多个线程同时访问同一个会话范围的辅助bean。
答案 0 :(得分:2)
是的,A Servlet session is thread safe
。但是,如果你在会话中放置可变对象。应用程序应该处理同步。
在您的情况下,if your Bean is Mutable i.e, has state. Yes it has to be thread safe.
关于您的测试用例,这取决于您使用的浏览器。大多数浏览器为每台服务器并行支持最多6个并行连接。但是,如果有cookie,不确定他们是否使用并行连接。