关于售票系统的疑问?

attached 2012-01-06 05:07:40
举个例子,就那火车站的售票系统,有10个售票窗口:
如果同一时间,在10个售票窗口有10个人,他们要买去同一个地方的票,也就是同意班次的票,他们都问有没有票?;
但是,现在库存数量是只有1张。
问题是:这是个窗口的售票员都能看到这一张票呢,还是只有其中一名售票员能看到这张票。
如果所有的售票员都能看到还有一张票,然后告诉给窗口乘客有,但是能出10张票吗?
如果只有一个售票员能看到还有一张票,那他告诉窗口乘客说有一张,其他人都被告知没有了,走人了,但是这个知道有票的乘客由于某种原由没有买这张票。那岂不是害的其他窗口的那些乘客没有机会买这张票呢?

这种问题从技术上、实际操作,是如何解决的。这个系统会是如何设计的呢?
...全文
525 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
rjzou2006 2012-01-12
  • 打赏
  • 举报
回复
有售票员都能看到这张票,然后会告知10个窗口的所有人,但是只有一个人能买成功
我之前做过类似的就是这样的。
rjzou2006 2012-01-12
  • 打赏
  • 举报
回复
有售票员都能看到这张票,然后会告知10个窗口的所有人,但是只有一个人能买成功
attached 2012-01-12
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 anhy 的回复:]

引用 20 楼 dntg007 的回复:

个人认为,检索时就加锁了。因为没听过售票员告诉你有票,然后再打票时突然告诉你没票了。我是没遇到过,有谁遇到过吗?


去年的时候遇到过。
[/Quote]

如果是这样,那就是所有售票员都能看到这张票,然后会告知10个窗口的所有人,但是只有一个人能买成功
放纵青春 2012-01-11
  • 打赏
  • 举报
回复
应该是查询时就把票锁定了吧……
attached 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 dntg007 的回复:]

个人认为,检索时就加锁了。因为没听过售票员告诉你有票,然后再打票时突然告诉你没票了。我是没遇到过,有谁遇到过吗?
[/Quote]

这个我也没遇到过,现在想知道的就是,这样的系统如何实现的,在实际运行中像我说的情况是否存在呢
dntg007 2012-01-11
  • 打赏
  • 举报
回复
个人认为,检索时就加锁了。因为没听过售票员告诉你有票,然后再打票时突然告诉你没票了。我是没遇到过,有谁遇到过吗?
不止鱼 2012-01-11
  • 打赏
  • 举报
回复
避免幻读呗,在买之前先加了锁,数据更新到最后再解锁,这样售票员看到的数据就是统一的,而不是全部看到的都是买前10张票,而出票就出不来的情况
戏子 2012-01-11
  • 打赏
  • 举报
回复
考验思维。。。
attached 2012-01-11
  • 打赏
  • 举报
回复
难道就没有人做过这方面的项目吗
anhy 2012-01-11
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 dntg007 的回复:]

个人认为,检索时就加锁了。因为没听过售票员告诉你有票,然后再打票时突然告诉你没票了。我是没遇到过,有谁遇到过吗?
[/Quote]

去年的时候遇到过。
aaron_ljh 2012-01-11
  • 打赏
  • 举报
回复
加个锁定,然后一个事务就可以啦,成功的继续走流程,失败的回滚
attached 2012-01-09
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 trocp 的回复:]

引用楼主 attached 的回复:
但是这个知道有票的乘客由于某种原由没有买这张票。那岂不是害的其他窗口的那些乘客没有机会买这张票呢?


10个窗口都看到这一张票,谁要谁就买,先锁定票,再付钱,再打票。

但是出现冲突一定是最后交易时出现的,如果没有意愿买票的,不会走到交易这一步。

就算真出现你说的情况,反正就这样了,你要怎么办吧??? 你能咬铁?
[/Quote]
这样的话,就是售票员告诉所有这10个乘客,有票。然后一起买,最终只有一个成功,告知其他乘客,被别人买走了,或者购买失败了?还是说“就一张了,抢吧!!!”呵呵
attached 2012-01-09
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 mlzhu007 的回复:]

引用 6 楼 okayu 的回复:
实际操作就是:预订要给钱,不要也行。
对于10个人都能看到只有1张票的问题,可以用查询锁定来解决。

比如剩余2张票,我就允许1号窗口,和2号窗口查询。 而后面几个窗口查询的时候:不是报查询无票,而是说查询等待中。 那1号不买了,3号查询就返回说有票。 然后2号买走了票,3号又买走了票。
4,5,6,7,8,9,10 返回说没票了。

但是觉得这……
[/Quote]
这样能理解,但是实际如果是这样做。那么会不会出现这种情况:第一个人和售票员在交涉,这张票一直在锁定,其他窗口在问的时候,售票员一直说:“你再等等?”
macy212 2012-01-08
  • 打赏
  • 举报
回复
线程锁定。
血饮 2012-01-08
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 gxywolf 的回复:]
资源抢夺,先到行得。可以同时都能看到有一张。如果有一个人选择购买就锁定票,其他人不能做购买操作,如果过一段时间没有购买,可以释放资源,其他人可以购买
[/Quote]这个应该可行。
sidney 2012-01-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 okayu 的回复:]
实际操作就是:预订要给钱,不要也行。
对于10个人都能看到只有1张票的问题,可以用查询锁定来解决。

比如剩余2张票,我就允许1号窗口,和2号窗口查询。 而后面几个窗口查询的时候:不是报查询无票,而是说查询等待中。 那1号不买了,3号查询就返回说有票。 然后2号买走了票,3号又买走了票。
4,5,6,7,8,9,10 返回说没票了。

但是觉得这样做意义不大。
[/Quote]
根据买票经验,这个应该比较靠谱,只是查询等待有超时时间。
qq5966381 2012-01-06
  • 打赏
  • 举报
回复
用synchronozid声明同步,if()条件充当红绿灯,问的时候谁都可以问,谁都可以看见,一旦有人预定了,红灯开启,资源除了第一个访问的线程任何线程无法干预了。
狼迹天涯 2012-01-06
  • 打赏
  • 举报
回复
资源抢夺,先到行得。可以同时都能看到有一张。如果有一个人选择购买就锁定票,其他人不能做购买操作,如果过一段时间没有购买,可以释放资源,其他人可以购买
oO临时工Oo 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用楼主 attached 的回复:]
但是这个知道有票的乘客由于某种原由没有买这张票。那岂不是害的其他窗口的那些乘客没有机会买这张票呢?
[/Quote]

10个窗口都看到这一张票,谁要谁就买,先锁定票,再付钱,再打票。

但是出现冲突一定是最后交易时出现的,如果没有意愿买票的,不会走到交易这一步。

就算真出现你说的情况,反正就这样了,你要怎么办吧??? 你能咬铁?
Stephen_ca 2012-01-06
  • 打赏
  • 举报
回复
典型的资源抢夺问题
加载更多回复(6)

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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