日期:2014-05-19  浏览次数:20609 次

多用户并发查询数据问题
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查询的第五步的数据就是错的,
应该怎么避免?都有哪些方法?

------解决方案--------------------
大概明白了楼主的意思。
只要定义的变量table2_id和table3_id是方法内部的局部变量,而不是这个Action的成员变量,这样的话并发访问到的table2_id和table3_id都不是同一个变量所以不会有楼主说的问题(因为 如果一个变量是局部变量,那么每个线程都会有一个该局部变量的拷贝,一个线程对该局部变量的改变不会影响到其他的线程);
如果定义的变量是这个Action的成员变量的话,并发访问会有问题,解决办法就是把这个Action设置成prototype的,这样每一个线程访问的Action对象都不是同一个了,其成员变量也不是同一个,那么也就不会有并发访问问题。