java这个问题算不算并发问题

BabyMason 发布于 2015/05/07 17:56
阅读 442
收藏 0
所有数据都存在T104表中,现在是A,B,C,D等用户同时登陆,各个用户都有自己单独的数据(T 104表中有字段和用户绑定),现在当A,B,C,D等同时修改或者转移自己的数据时,出现问题:1、数据转移混乱,A的数据不是A而而是B,B的是D的数据;2、A中数据内容发生改变,但A认定不是自己修改;请问这个算并发问题么,Tomcat日志里面没有异常或者错误,这种问题该怎么解决,网上搜到这个问题了但没有解决办法。
加载中
0
cnDavidChen
cnDavidChen

这有可能是并发问题。

可能程序中共享了什么变量,4个用户同时操作它,导致发生错误。这个共享变量跟这4个用户的id或者某个用户标识有关。

解决办法是,把这个变量(类的属性)做成方法内局部变量,或者把这个变量所在的类不要做成单例的。必须做成全局的以便在各个地方调用的,但又每个用户都不一样的,比如:请求的参数列表,可以做成ThreadLocal。

看看Service等等有没有属性,如果有,研究这个属性在哪里被调用、被修改。


cnDavidChen
cnDavidChen
回复 @夜夜夜丶寒 : 发生问题的几率大吗?是否可用重现? 如果可以重现,想办法在各个被调用得函数里打印当前线程名对应的登录用户标识,另外在操作表的那个方法也打印当前线程和被操作的用户标识。看两者是否一致,是否会产生不一致。 如果都是一致的,但是数据库里的数据却不一致,那么这很奇怪了啊。如果存在不一致的地方,那么仔细再考虑下为什么会不一致呢,是不是传入的用户标识在哪里取错了。
BabyMason
BabyMason
现在正在找这个问题,您的答案对我非常有易,现在还是不能发现问题,请问有什么快速查找的方法没有?
BabyMason
BabyMason
刚看了下数据库设计和程序代码部分,T104表中只有一个id对应用户表的用户id,多用户登录操作,tomcat应该会自动分几个线程进行的吧?,多个线程使用同一个函数访问不同的资源,这不会引起线程安全问题吧?,程序中还有必要考虑线程安全么?
0
J
Jwxl

问题在java这边,数据库不可能查A给你B.

这是线程安全问题导致的.推荐本书,java并发编程实战(老外Brian Goetz写的那本) ,虽然老了点

开源X
开源X
对,数据库是要啥肯定给什么的
0
yeliuping
yeliuping
同志这是bug
yeliuping
yeliuping
调试下 日志打印出来 hibernate sql语句等 很容易定位问题
BabyMason
BabyMason
不知道是不是Bug,看了两天了快,还没什么收获。。
0
勇敢的蜗牛_Z
勇敢的蜗牛_Z
我局的还是代码有问题
BabyMason
BabyMason
找不出来,,,别人写的程序 看了好久还是有点晕晕的 文档注释都没有,,
0
alexgaoyh
alexgaoyh
查看代码里面是不是有形如共享变量的存在····
0
yak
yak
用得什么框架
BabyMason
BabyMason
Spring Hibernate ext
0
一号男嘉宾
一号男嘉宾
我也觉得你这个是程序有BUG
勇敢的蜗牛_Z
勇敢的蜗牛_Z
想楼上几位说的,有没有全局变量之类的, id取的对不对
BabyMason
BabyMason
应该不会有吧 程序里面没考虑并发性问题 按理说框架应该支持至少是个用户同事操作吧
0
b
bp87
如何使用新的东西?不知道,如果你使用的企业管理工具,但可以推荐一个好的方案我想告诉你们一个新的有趣的工具,我知道你有很多其他的事情,但你可以尝试使用http://kanbantool.com。你有什么其他的建议?这是一个新的东西,有很多的选择和您的企业管理可以受益于使用它。
0
zigzagroad
zigzagroad
把类级变量声明为方法级变量,即可解决你的问题。
BabyMason
BabyMason
这个正在查找是不是这方面的问题,找到现在还没发现是这个,关键是没有任何属性能影响两或者多用户之间数据的变化
0
zigzagroad
zigzagroad
这表现的是并发问题,其实是bug
返回顶部
顶部