/**
* 场景:这是一家支持网上售卖面包的店,现在储存只有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个面包
抱歉,面包不够了