action里一个方法中用jdbc进行这样几个查询:
1、resultset rs = select table2_id,table3_id from table1 where id = id;
2、int table2_id = rs.get(0);
3、int table3_id = rs.get(1);
4、select table2_data from table2 where id = table2_id;
5、select table3_data from table3 where id = table3_id;这样在多用户请求高并发的情况下会出现问题吗?
比如用户1走到第四步,还没执行第五步,用户2又执行了第一步,那么用户1查询的第五步的数据就是错的,
应该怎么避免?都有哪些方法?
1、resultset rs = select table2_id,table3_id from table1 where id = id;
2、int table2_id = rs.get(0);
3、int table3_id = rs.get(1);
4、select table2_data from table2 where id = table2_id;
5、select table3_data from table3 where id = table3_id;这样在多用户请求高并发的情况下会出现问题吗?
比如用户1走到第四步,还没执行第五步,用户2又执行了第一步,那么用户1查询的第五步的数据就是错的,
应该怎么避免?都有哪些方法?
解决方案 »
- 老问题,小弟再向数据库中插入数据,可是总出现??????????号
- IE阻止window.open
- 大家有用做过JAVA EE方面的微博系统的经验吗?请教几个问题
- hibernate问题 'XXX' is not mapped
- 我想在一个java bean 中用到request.getParameter 要怎么做?
- [高分急求500??]struts里配置的连接池,在系统中作成通用的类来使用?????????????
- hibernate问题:两个对象同时具有one-to-many和one-to-one双重关系
- java 菜鸟问题
- 请问,在ejb中,所谓上下文究竟是什么东西?
- 大视频播放问题
- 帮看一个并发访问的问题!!!!!!!!!!!
- hibernate 查询报错QuerySyntaxException
除非你4 是一个update 操作了table1
这就要用乐观锁,或悲观锁了。
只要定义的变量table2_id和table3_id是方法内部的局部变量,而不是这个Action的成员变量,这样的话并发访问到的table2_id和table3_id都不是同一个变量所以不会有楼主说的问题(因为 如果一个变量是局部变量,那么每个线程都会有一个该局部变量的拷贝,一个线程对该局部变量的改变不会影响到其他的线程);
如果定义的变量是这个Action的成员变量的话,并发访问会有问题,解决办法就是把这个Action设置成prototype的,这样每一个线程访问的Action对象都不是同一个了,其成员变量也不是同一个,那么也就不会有并发访问问题。