「库存同步java」库存同步期间如何避免超卖

博主:adminadmin 2022-11-24 11:24:05 50

本篇文章给大家谈谈库存同步java,以及库存同步期间如何避免超卖对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

javaweb入库出库后,库存如何同步变化

第一次同步全量同步,后面的所有同步增量同步。

全量同步指一次性同步所有的库存;增量同步指在之前一次同步的基础之上修改库存才可以同步。

java多线程synchronized同步的问题

首先我确认一下你的需求,你实际上是想做这件事

有4个线程,两个负责售货,两个负责进货,其中售货速度3进货速度1,默认当前库存为100,然后4个线程启动,在你的期望中库存只要大于2,就可以出货,库存小于200就要进货

下面是我对上面的需求做的一点小修改,不知道符合你的要求么?

jinhuo.java

class jinhuo {

    private huowu h;

    boolean flag = true;

    public void jin(huowu h) {

        this.h = h;

    }

    public  void show() {

        while (flag) {

            synchronized(h){

                if (h.com 200){

                    shixian();

                }

            }

            try {

                Thread.sleep(1000);

            } catch (InterruptedException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

    public void shixian() {

        h.com++;

        System.out.println(Thread

            .currentThread()

            .toString() + "-------补货完成,当前库存剩余" + h.com);

    }

}

shouhuo.java

class shouhuo {

    private huowu h;

    boolean flag = true;

    public void jin(huowu h) {

        this.h = h;

    }

    public void show() {

        while (flag) {

            synchronized (h) {

                if (h.com  2){

                    shixian();

                }

            }

            try {

                Thread.sleep(1000);

            } catch (InterruptedException e) {

                // TODO Auto-generated catch block

                e.printStackTrace();

            }

        }

    }

    public void shixian() {

        h.com = h.com - 3;

        System.out.println(Thread

            .currentThread()

            .toString() + "-------售货完成,当前库存剩余" + h.com);

    }

}

其余代码不变

部分打印结果,这个临界值部分

Thread[Thread-1,5,main]-------售货完成,当前库存剩余3

Thread[Thread-0,5,main]-------售货完成,当前库存剩余0

Thread[Thread-2,5,main]-------补货完成,当前库存剩余1

Thread[Thread-3,5,main]-------补货完成,当前库存剩余2

Thread[Thread-3,5,main]-------补货完成,当前库存剩余3

Thread[Thread-2,5,main]-------补货完成,当前库存剩余4

Thread[Thread-0,5,main]-------售货完成,当前库存剩余1

Thread[Thread-2,5,main]-------补货完成,当前库存剩余2

Thread[Thread-3,5,main]-------补货完成,当前库存剩余3

=============================================================

至于你代码中的问题

终止循环的flag是不必要的,不要终止线程会使你的这个需求看上去更加的合理

我加了点线程的阻塞时间,以免执行太快无法很好的展现结果

同步标志你原来是加在方法上了,我改在了对象上

既然是面向对象的编程,为什么传入线程的是对象的某个属性而不是对象本身呢..

java J2EE 如何实现库存上下线报警机制?请详细说明 谢谢

如果你的产品的种类不是上百万的话,可以非常简单的实现。

每次在你更新库存的时候,数据库锁行,即一种商品(不是锁表哦)。更新前取下实时库存,然后加减你的更新值,看是否超上下限。

超了就不更新(根据你的业务),然后返回一个标记位flag到服务端(比如0是正常,1是超上限,-1超下限制)。服务端维护一个同步的map,存放mapproductid,flag;根据之前返回的标记位,去主动发送消息。也按照每个登录系统的人的session可以做轮询来通知用户。

只要注意2点:1.锁行和更新库存确保一个事务。2.服务端维护的map必须做写入的同步

库存同步java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于库存同步期间如何避免超卖、库存同步java的信息别忘了在本站进行查找喔。

The End

发布于:2022-11-24,除非注明,否则均为首码项目网原创文章,转载请注明出处。