为什么Session属性在Servlet中正式不是线程安全的?

时间:2011-09-27 03:04:15

标签: session servlets attributes

我正在阅读一些关于Java servlet中属性范围的servlet文本。在文中,作者写道: “Session attributes are officially not thread safe.

这使我感到困惑,因为我认为一个用户只有一个特定的会话,没有人可以访问其他用户。如果是这样,会话属性是线程安全的。或者我误解了什么?

2 个答案:

答案 0 :(得分:5)

  

这使我感到困惑,因为我认为一个用户只有一个特定的会话,没有人可以访问其他用户。如果是这样,会话属性是线程安全的。

好吧,如果是这种情况,会话属性不一定是线程安全的。这与说它们是线程安全的不同。

如果您有多个线程同时处理同一用户的会话,则缺少线程安全可能会成为问题。也许您从主请求工作线程中生成了一些并行执行。或者同一个用户多次访问服务器(例如同时加载五个帧)。

答案 1 :(得分:2)

会话属性不是thread safe

从此文件(Java theory and practice: Are all stateful Web applications broken?

  

当Web应用程序存储可变会话数据(如购物)时   在HttpSession中购物车,两个请求可能会尝试   同时访问购物车。几种失败模式   是可能的,包括:   
1。原子性失败,其中一个线程是   更新多个数据项,另一个线程读取数据   他们处于不一致的状态。 a之间的可见性失败   读取线程和写入线程,其中一个线程修改   购物车,但另一个看到购物车的陈旧或不一致的状态   内容

查看来自coderanch;

的帖子
  1. How HttpSession is not thread safe
  2. Are Session thread safe.