servlet httpSession 的属性为什么不在内部实现线程同步?

发布于 2022-09-03 15:08:45 字数 574 浏览 20 评论 0

clipboard.png

图中说的是对HttpSession进行修改的时候需要同步操作,这个我理解。问题是,这个同步锁为啥不是直接写在HttpSessionsetAttribute方法内部的,这样在使用setAttribute的时候就直接线程安全了。

否则你需要所有使用到同一个HttpSession的位置都进行synchronized(session)操作,这对编码者的要求比较高,只要有一个人写错了就完蛋了。

进一步说,我觉得框架设计时,就应该规避掉人为犯错的可能,能够通过机制解决的问题不要靠人的觉悟。

缺点,我想到的只是这样会消耗资源,当不存在线程同步问题时,比如就只要一个线程使用HttpSession,还会加解锁消耗一定的资源。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

盗梦空间 2022-09-10 15:08:46
  1. HttpSession只是一个接口规范,所以没有定义具体的细节问题;

  2. 在具体的HttpSession实现中是有线程安全实现的考虑,例如Tomcat8中session所有属性,是存储在一个独立的ConcurrentHashMap中的;

  3. 一味的对session加锁同步,会造成性能问题,什么时候要对session加锁其实取决于你的具体需求。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文