首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >HttpSession线程安全吗? set/get属性操作是线程安全的吗?

HttpSession线程安全吗? set/get属性操作是线程安全的吗?
EN

Stack Overflow用户
提问于 2009-03-05 21:03:18
回答 5查看 43.5K关注 0票数 55

另外,被设置的对象是否必须是线程安全的,以便保证我们知道存储在会话中的对象的状态是已知的。

另外,我在网上看到一些人建议使用:

代码语言:javascript
复制
synchronized(session) {
  session.setAttribute("abc", "abc");
}

这是一个有效的建议吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-06 05:07:24

不,根据IBM - Java theory and practice: Are all stateful Web applications broken?的说法,它们不是线程安全的。你需要同步。

来自Java Ranch的How HttpSession is not thread safe可能也会有所帮助。

票数 41
EN

Stack Overflow用户

发布于 2009-03-05 21:22:50

不是的。而且,由于您不希望相同的客户机(使用会话)执行并发请求,因此应该像Spring MVC中的AbstractController那样序列化这些请求

票数 5
EN

Stack Overflow用户

发布于 2009-03-05 21:27:21

在某些方面,这取决于您的客户端设计。

在您的web设计中,您是否有机会让单个客户端使用同一个HTTP会话同时处理多个未完成的请求?这似乎很难做到,除非您将单个HTTP会话绑定到多个套接字。(又名AJAX)如果不这样做,就服务器而言,给定客户端的HTTP访问将是单线程的,这意味着单个会话实际上是线程安全的。

同步您的会话对象将使应用程序在未来的更改中更安全,这些更改使您的web应用程序能够同时有多个请求,因此这不是一个坏主意。在现代Java实现中,同步不像以前那样有很大的开销,特别是当同步通常是无争用的时候。如果您的应用程序使用AJAX,这意味着您希望有多个对web服务器的动态并发请求,那么同步是必须的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/616601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档