当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

HttpSession的线程安全问题及注意事项[Java编程]

赞助商链接



  本文“HttpSession的线程安全问题及注意事项[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:

HttpSession session = request.getSession();
List<Product> list = session.getAttribute("productCart");
myService.save(list); // 保存购物车数据到数据库

这个对象会被多次利用,也会被同一个用户的多个页面利用,所以他关于系统来说是线程不安全的.

比方用户在从产品列表里面挑选产品,这面挑选3种,他点了查看购物车

该用户还开了另一个页面,持续挑选产品.

此时,在显示购物车的页面,有大概运行在一半时,其已经挑选的产品列表,并另一个页面的操作改正了.所以显示的产品数目有大概并非3种.

因为session需求保持当前用户的信息,所以其在多个线程里是同享的.所以是线程不安全的.

不过,这个是表面现象,我们只要精确利用事件,保证数据的精确性,表面的问题可以不用管它.

我们可以把session里面的数据别的保存到一个新的数据对象里,这个对象不再因为session的改变而呈现变更.这个对象传送给业务层举行事件处理,保证数据级别的精确.

千万不要把session,大概 session里面的对象直接传送给业务层,因为你的业务处理一半时,一样大概呈现session对象被改变的情形.有大概造成重要数据呈现毛病.

举例:

session 对应三个产品,

事件里面循环了产品,并计算了总价钱,

计算完毕,预备保存时,session变了,产品变成了4个.

此时开始保存.产品保存了4个,可总价钱却还是3个的.

呈现了数据不一致.

改正后的例子

session 对应三个产品

重新生成一个产品对象数组,把session数据复制过来,然后传送给业务层

事件里面循环计算总价钱

计算完毕,此时session变了,但并不影响我们这个新的产品数组对象

保存,三个产品,价钱也精确.

HttpSession session = request.getSession();
List<Product> list = session.getAttribute("productCart");
List<Product> listNew = new ArrayList<Product>();
Product pNew;
for(Product p : list){
 pNew = new Product();
 pNew.setProductId(p.getProductId());
 // 别的的复制参数的语句
 listNew.add(pNew); // 保存到新的列表里面
}
myService.save(listNew); // 保存购物车数据到数据库,这个是安全的

总结:

有些线程安全问题是很躲藏的,等你出了问题,极大概根本不认为会是那边出的问题.记着一点,Java里面的对象传送的是对象的引用,只要2个地方用了相同的引用,则别的地方的变更,这一面也会变更.

原文:http://www.java2000.net/p9667


  以上是“HttpSession的线程安全问题及注意事项[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
  • win8 Could not load type System.ServiceModel.Activation.HttpModule 错误办理筹划
  • MSXML2.ServerXMLHTTP 对象具体属性、办法阐明
  • linux下https的搭建总结
  • CentOS下lighttpd+php安装
  • Windows下Apache、Lighttpd、 Nginx(Ngwsx)静态文件拜候测试比较
  • CentOS 6.2 X86 上布置IBM HTTPserver7.0
  • 详解 Nginx + Tomcat HTTPS/SSL 配置办法
  • Nginx https 免费SSL证书配置指南
  • Asp WinHttp.WinHttpRequest.5.1 对象利用详解
  • PHP利用udp模拟http恳求
  • Cache篇:操纵HTTP指令举行攻击
  • Apache服务以及httpd.conf配置详解
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .