另外,被设置的对象是否必须是线程安全的,以便保证我们知道存储在会话中的对象的状态是已知的。
另外,我在网上看到一些人建议使用:
synchronized(session) {
session.setAttribute("abc", "abc");
}
这是一个有效的建议吗?
发布于 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可能也会有所帮助。
发布于 2009-03-05 21:22:50
不是的。而且,由于您不希望相同的客户机(使用会话)执行并发请求,因此应该像Spring MVC中的AbstractController那样序列化这些请求
发布于 2009-03-05 21:27:21
在某些方面,这取决于您的客户端设计。
在您的web设计中,您是否有机会让单个客户端使用同一个HTTP会话同时处理多个未完成的请求?这似乎很难做到,除非您将单个HTTP会话绑定到多个套接字。(又名AJAX)如果不这样做,就服务器而言,给定客户端的HTTP访问将是单线程的,这意味着单个会话实际上是线程安全的。
同步您的会话对象将使应用程序在未来的更改中更安全,这些更改使您的web应用程序能够同时有多个请求,因此这不是一个坏主意。在现代Java实现中,同步不像以前那样有很大的开销,特别是当同步通常是无争用的时候。如果您的应用程序使用AJAX,这意味着您希望有多个对web服务器的动态并发请求,那么同步是必须的。
https://stackoverflow.com/questions/616601
复制相似问题