多个用户同时访问一个 业务方法,会不会有线程问题。

sLeep133 2016-04-11 04:08:10
假设 有个 业务方法 中的业务是卖票,用户 每次在 前台点击 售票按钮后,就进入到这个 卖票的业务方法,然后呢,假设这个卖票的业务方法是这样写的:进入这个方法后 先到数据库查询看看有没有可以出售的票可以卖,如果有则 正常执行这个方法,最后 更新票的总数减1,如果无 则返回页面给用户提示。
如何问题就来的:如果多个操作人同时点击卖票按钮进入到这个 业务方法,会不会出现线程安全问题,说白了就是 操作人A和操作人B同时点击卖票,然后这个时候的票数就只有1张了,就在操作人A执行到业务方法的一半,准备更新票的总数减1时,操作人B首先进入这个方法并执行完,最终导致 票数为-1,然后操作人A和B 都 在前台提示 “售票成功”!
(麻烦各位大神,说说 那些JAVAWEB框架 是不会出现这些线程问题的,为什么?)
...全文
1453 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
nfsnyy007 2016-04-11
  • 打赏
  • 举报
回复
你这个问题其实是数据的脏读问题。A买了一张票总数少1的同时B买了一张票而B看到的总数没变(A买之前的总数)。 针对这个问题可以进行加锁。如给线程加上一个锁。或者对表进行加锁操作。
sLeep133 2016-04-11
  • 打赏
  • 举报
回复
补充: 如果 抛开数据库 的 脏读 幻读 不可重复读的事务隔离机制看说,我其实更想知道的是在JAVAWEB框架中,的每个业务方法,是否存在线程安全问题,也就是 操作人A和操作人B同时进入 同一个 业务方法,会不会出现一种情况就是 操作人A进入到这个业务方法中的的 局部变量 共享给操作人B了,从而导出 程序就出现了逻辑错误.
奄灬苟且偷生 2016-04-11
  • 打赏
  • 举报
回复
你一个方法,也不能一个人访问,其他人就进不来了啊,所以还是在数据处理上下功夫吧,不能做成有一个进程,大家都进不来了,就等你,事务还是用来回滚吧, 个人观念觉的只需要在SQL和数据库上做操作就可以实现效果 不喜勿喷
奄灬苟且偷生 2016-04-11
  • 打赏
  • 举报
回复
很有可能会出现这个问题,我给你减小一下这个记录(其实你说的并不是多线程的问题,而是数据的处理问题) 首先mysql进行数据库操作的时候会锁表,这个你不用太担心,会减少一起操作的问题 sql语句尽量写成多表修改,比如 update A.a set A.a='嗨' where A.a=B.a and B.number=1; 你写成 再去查一次然后再修改,正好Mysql操作表的时候会锁表,所以你说的情况会降低
Coder_D 2016-04-11
  • 打赏
  • 举报
回复
你说的问题转换一下其实就是并发下的事务隔离。

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧