分析
分析
工厂
属性:
剩余商品数量
最大商品数量
方法:
生产
判断剩余商品数量是否最大商品数量
大于:无限期休眠
小于:
剩余商品数量++
通知可以开始销售
销售
判断剩余商品数量是否小于等于0
小于等于0:无限期休眠
反之:
剩余商品数量--
通知可以开始生产
生产人员:线程
属性:工厂对象
方法:run
无限生产
销售人员:线程
属性:工厂对象
方法:run
无限销售
注意:保证工厂对象是同一个
代码
package com.qf.demo11;
/**
* 生产任务
*/
public class ShengChan implements Runnable{
private Factory factory;
public ShengChan(Factory factory) {
super();
this.factory = factory;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
factory.add();
}
}
}
package com.qf.demo11;
/**
* 工厂类
*/
public class Factory {
//剩余商品数量
private int num = 0;
//最大商品数量
private static final int MAX_NUM = 10;
//生产方法
public synchronized void add() {
if (num >= MAX_NUM) {
System.out.println("仓库已满");
String name = Thread.currentThread().getName();
System.out.println(name+"停止生产");
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.print("原商品剩余:"+num+"件");
num++;
String name = Thread.currentThread().getName();
System.out.println(name+"生产了一件,先在商品剩余数量为:"+num+"件");
this.notifyAll();
}
}
//销售的方法
public synchronized void get() {
if (num <= 0) {
System.out.println("仓库中已经没有商品");
String name = Thread.currentThread().getName();
System.out.println(name+"停止销售");
try {
this.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else {
try {
Thread.sleep(800);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.print("原商品剩余:"+num+"件");
num--;
String name = Thread.currentThread().getName();
System.out.println(name+"销售了一件,先在商品剩余数量为:"+num+"件");
this.notifyAll();
}
}
}
package com.qf.demo11;
/**
* 生产任务
*/
public class ShengChan implements Runnable{
private Factory factory;
public ShengChan(Factory factory) {
super();
this.factory = factory;
}
@Override
public void run() {
// TODO Auto-generated method stub
while(true) {
factory.add();
}
}
}
测试类
package com.qf.demo11;
public class Demo11 {
public static void main(String[] args) {
//工厂对象
Factory factory = new Factory();
ShengChan sc01 = new ShengChan(factory);
ShengChan sc02 = new ShengChan(factory);
XiaoShou xs01 = new XiaoShou(factory);
XiaoShou xs02 = new XiaoShou(factory);
XiaoShou xs03 = new XiaoShou(factory);
Thread t01 = new Thread(sc01, "老李");
Thread t02 = new Thread(sc02, "王工");
Thread t03 = new Thread(xs01, "小娜");
Thread t04 = new Thread(xs02, "小丽");
Thread t05 = new Thread(xs03, "小美");
t01.start();
t02.start();
t03.start();
t04.start();
t05.start();
}
}