hibernate不是有悲观锁和乐观锁么http://www.blogjava.net/baoyaer/articles/203445.html

解决方案 »

  1.   

    synchronized{}把方法写在同步锁中。
      

  2.   

    你认为这问题,你想自已处理分配给某个用户,这样好吗?我认为不好,给了第一个用户,第二个用户不给,为什么?甚至还有N多用户!这时候,就看哪个用户先抢占CPU,线程有先后顺序!该轮到谁就轮谁。
      

  3.   

    抢的前提是存在数据,如何判断存在数据,如何处理数据才是关键
    说线程啊什么玩意的都是不沾边的方法,15楼说的是一个思路,关键在数据
    数据在哪里?正常情况下都存储在数据库中的吧,
    说白了就是看你如何对数据进行抢占式处理吗
    参考这个
    http://www.windbi.com/showtopic-120254.aspx
      

  4.   

    有人品的,就判断一下客户的购买力,历史交易记录什么的,使用其他内容作参考。
    无人品的,random好了。
      

  5.   

    synchronized
     一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。
      

  6.   

    你要做这个商业订单系统,肯定要用到数据库,而数据库中比如mysql有 行级锁定, 比如你那一件只剩库存1的占用行的id=1(一个ID代表一个衣服种类,唯一标识) 那么当客户下订单时会把id=1的这一品种的衣服锁定,后面来的用户都必须等待前一个客户操作完(即库存量-1的操作)。等前一个客户操作完后,释放锁让后面的客户下单,当后一位进入时,你再判断库存就可以防止幽灵变量了。
      

  7.   

    看人品呗,在客户端同时(就算是精确到毫秒)这种情况是存在的,因为是允许多人操作,但是到了后台处理,就会有个先后了(CPU总是会分个先后的,就看CPU更喜欢谁了)。如果楼主想问怎么处理这种情况,用同步呗(具体操作请参考其他高手的回答)。
      

  8.   

    首先解释一下“同时”,
    在颗粒度足够细的条件下,
    是没有同时的概念的。
    总会有一个先操作,一个后操作。如果是直接写sql,
    处理这样有抢占的数据处理,
    标准sql在select中有个for update的关键字。
    第2个来访问该条数据的程序会被挂起。
    等第一个执行完了再操作。不过在数据库层面只是挂起。
    不能立刻报错,
    或者设置挂起时间,超时了报错。oracle在这个关键字之后,还有个“nowait”的关键字,
    就是第2个访问者访问到被“for update nowait”的数据,
    就会立即返回一个ORA-XXXX的错误码给程序。lz可以参考一下不过这都是老黄历了,
    现在有没有更先进的,或者更方便的调用我就不得而知了。good luck