库存只剩一件衣服,2个用户同分同秒下单,到底谁能买到这件衣服?

function_chk 2014-04-02 02:56:35
最近在做一项目,遇到这个问题不知如何处理。。。
库存只剩一件衣服,这时候2个用户同分同秒下单,到底谁能买到这件衣服?
...全文
1449 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
villagehead 2014-04-04
  • 打赏
  • 举报
回复
首先解释一下“同时”, 在颗粒度足够细的条件下, 是没有同时的概念的。 总会有一个先操作,一个后操作。 如果是直接写sql, 处理这样有抢占的数据处理, 标准sql在select中有个for update的关键字。 第2个来访问该条数据的程序会被挂起。 等第一个执行完了再操作。 不过在数据库层面只是挂起。 不能立刻报错, 或者设置挂起时间,超时了报错。 oracle在这个关键字之后,还有个“nowait”的关键字, 就是第2个访问者访问到被“for update nowait”的数据, 就会立即返回一个ORA-XXXX的错误码给程序。 lz可以参考一下 不过这都是老黄历了, 现在有没有更先进的,或者更方便的调用我就不得而知了。 good luck
momoyssy 2014-04-04
  • 打赏
  • 举报
回复
看人品呗,在客户端同时(就算是精确到毫秒)这种情况是存在的,因为是允许多人操作,但是到了后台处理,就会有个先后了(CPU总是会分个先后的,就看CPU更喜欢谁了)。如果楼主想问怎么处理这种情况,用同步呗(具体操作请参考其他高手的回答)。
s041738 2014-04-04
  • 打赏
  • 举报
回复
你要做这个商业订单系统,肯定要用到数据库,而数据库中比如mysql有 行级锁定, 比如你那一件只剩库存1的占用行的id=1(一个ID代表一个衣服种类,唯一标识) 那么当客户下订单时会把id=1的这一品种的衣服锁定,后面来的用户都必须等待前一个客户操作完(即库存量-1的操作)。等前一个客户操作完后,释放锁让后面的客户下单,当后一位进入时,你再判断库存就可以防止幽灵变量了。
chen870201 2014-04-03
  • 打赏
  • 举报
回复
排队机制不弄不行
sunylf 2014-04-03
  • 打赏
  • 举报
回复
学习.........
java_caoxing 2014-04-03
  • 打赏
  • 举报
回复
确实。。看人品。。看机器配置
panshoup 2014-04-03
  • 打赏
  • 举报
回复
引用 9 楼 benluobobo 的回复:
这个问题你应该问CPU
看cpu看人品 这事
机器学习之禅 2014-04-03
  • 打赏
  • 举报
回复
同步锁 添加随机一个判定值
火龙岛主 2014-04-03
  • 打赏
  • 举报
回复
有人品的,就判断一下客户的购买力,历史交易记录什么的,使用其他内容作参考。 无人品的,random好了。
专注or全面 2014-04-03
  • 打赏
  • 举报
回复
抢的前提是存在数据,如何判断存在数据,如何处理数据才是关键 说线程啊什么玩意的都是不沾边的方法,15楼说的是一个思路,关键在数据 数据在哪里?正常情况下都存储在数据库中的吧, 说白了就是看你如何对数据进行抢占式处理吗 参考这个 http://www.windbi.com/showtopic-120254.aspx
gbwl_cgl 2014-04-03
  • 打赏
  • 举报
回复
总是会有先后的,如果觉得不放心,使用线程锁撒
xiejin90314 2014-04-03
  • 打赏
  • 举报
回复
谁先付钱就是谁的。。不给钱拿在手里买你毛用
forwin 2014-04-03
  • 打赏
  • 举报
回复
这个要看谁先LOCK
AngelWings 2014-04-03
  • 打赏
  • 举报
回复
网速快的那个能买到!
liangchengfck1 2014-04-03
  • 打赏
  • 举报
回复
synchronized 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
volte 2014-04-03
  • 打赏
  • 举报
回复
这是共享资源分配的问题!没那么复杂吧
lan120576664 2014-04-03
  • 打赏
  • 举报
回复
伟大的天国有这么例子,你就学一下吧。 什么东西都摇号....... 你也可以搞个"摇号"
Spring89 2014-04-02
  • 打赏
  • 举报
回复
你认为这问题,你想自已处理分配给某个用户,这样好吗?我认为不好,给了第一个用户,第二个用户不给,为什么?甚至还有N多用户!这时候,就看哪个用户先抢占CPU,线程有先后顺序!该轮到谁就轮谁。
C-J 2014-04-02
  • 打赏
  • 举报
回复
不是有线程锁的么
rmengshu 2014-04-02
  • 打赏
  • 举报
回复
synchronized{}把方法写在同步锁中。
加载更多回复(13)

81,094

社区成员

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

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