模拟网上下单保证库存问题

/**
 * 场景:这是一家支持网上售卖面包的店,现在储存只有15个面包,
 * 如何保证下单成功的客户,可以有面包,而没有面包,会让顾客下单失败。
 * @author L
 *
 */

public class TestBread {

    public static void main(String[] args) {
        Bakery bak = new Bakery(15);
        Thread t1 = new Thread(new shopAssistant1(bak) , "店员公民");
        Thread t2 = new Thread(new shopAssistant2(bak) , "店员光忙");
        t2.start();
        t1.start();
    }

}
//店员1号
class shopAssistant1 implements Runnable{
    Bakery bak;
    
    public shopAssistant1(Bakery bak) {
        super();
        this.bak = bak;
    }

    public void run() {
        synchronized(bak){
            bak.sellingBread(10);
        }
        
    }
}
//店员2号
class shopAssistant2 implements Runnable{
    Bakery bak;
    
    public shopAssistant2(Bakery bak) {
        super();
        this.bak = bak;
    }

    public void run() {
        synchronized(bak){
            bak.sellingBread(10);
        }
    }
}
/**
 * 判断顾客下单是否库存足够
 * @author L
 *
 */

class Bakery{
    int breadNumber;
    public Bakery(){}
    public Bakery(int breadNumber){
        this.breadNumber = breadNumber;
    }
    public void sellingBread(int number){
        if(number <= this.breadNumber){
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println("请稍等。。");
            this.breadNumber = this.breadNumber - number;
            System.out.println(Thread.currentThread().getName() + "卖掉" + number + "个面包,还剩" + this.breadNumber + "个面包");
        }else{
            System.out.println("抱歉,面包不够了");
        }
        
    }
    
}

运行结果:

请稍等。。
店员光忙卖掉10个面包,还剩5个面包
抱歉,面包不够了

发布了32 篇原创文章 · 获赞 85 · 访问量 3034

猜你喜欢

转载自blog.csdn.net/S9264L/article/details/104806375
今日推荐