【发布时间】:2011-11-25 16:46:49
【问题描述】:
我正在阅读一些关于 Java servlet 中属性范围的 servlet 文本。在文中,作者写道:
"Session attributes are officially not thread safe."
这让我很困惑,因为我认为一个用户只有一个特定的会话,没有人可以访问其他用户。如果是这样,会话属性是线程安全的。还是我误会了什么??
【问题讨论】:
标签: session servlets attributes
我正在阅读一些关于 Java servlet 中属性范围的 servlet 文本。在文中,作者写道:
"Session attributes are officially not thread safe."
这让我很困惑,因为我认为一个用户只有一个特定的会话,没有人可以访问其他用户。如果是这样,会话属性是线程安全的。还是我误会了什么??
【问题讨论】:
标签: session servlets attributes
这让我很困惑,因为我认为一个用户只有一个特定的会话,没有人可以访问其他用户。如果是这样,会话属性是线程安全的。
好吧,如果是这样的话,会话属性不需要是线程安全的。这与说它们是线程安全的不同。
如果您有多个线程同时处理同一个用户的会话,则缺乏线程安全性可能是个问题。也许您从主请求工作线程产生了一些并行执行。或者同一个用户多次访问服务器(比如同时加载五帧)。
【讨论】:
会话属性不是thread safe。
来自此文档 (Java theory and practice: Are all stateful Web applications broken?)
当 Web 应用程序存储可变会话数据时,例如购物 HttpSession 中的购物车,两个请求可能会尝试 同时访问购物车。几种故障模式 是可能的,包括:
1。原子性失败,其中一个线程 更新多个数据项,另一个线程读取数据,同时 他们处于不一致的状态
2。之间的可见性失败 读线程和写线程,其中一个线程修改 购物车,但对方看到购物车的状态陈旧或不一致 内容
看看coderanch的帖子;
【讨论】: