|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
诸如RMI,EJB等一些技术并不是你说的那么复杂,而是它们把一些复杂的工具封装成不复杂的工具了,理解这些工具是需要些时间。我问你,.net网页编程里有这些工具吗?要简单多少?。
HttpSessionsession= 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变了,但其实不影响我们这个新的产物数组对象
保留,三个产物,代价也准确。
HttpSessionsession= request.getSession();
List<Product> list=session.getAttribute("productCart");
List<Product>listNew=newArrayList<Product>();
ProductpNew;
for(Productp:list){
pNew=newProduct();
pNew.setProductId(p.getProductId());
//别的的复制参数的语句
listNew.add(pNew);//保留到新的列内外面
}
myService.save(listNew);//保留购物车数据到数据库,这个是平安的
总结:
有些线程平安成绩是很潜伏的,等你出了成绩,极可能基本不以为会是那边出的成绩。记着一点,Java内里的对象传送的是对象的援用,只需2个中央用了不异的援用,则别的中央的变化,这一面也会变化。
原文:http://www.java2000.net/p9667
你精通任何一门语言就最强大。现在来看,java的市场比C#大,C#容易入手,比较简单,java比较难 |
|