首先创建一个商品类Goods,类中有商品库存与生产和消费的方法。
eg:商品类:
public class Goods {
//商品名称
private String goodsName;
//商品库存
private int count;
//生产方法
public synchronized void set(String goodsName) throws InterruptedException {
if (this.count > 0){
System.out.println("现在还有库存哦~");
wait();
}
this.goodsName = goodsName;
this.count = count +1;
Thread.sleep(1000);
System.out.println("生产:"+toString());
//生产完通知消费者线程可以消费了
notify();
}
public synchronized void get() throws InterruptedException {
if (this.count == 0){
System.out.println("商品已售完、请稍候~");
wait();
}
//每次消费一个产品
this.count -= 1;
Thread.sleep(1000);
System.out.println("消费"+ toString());
notify();
}
@Override
public String toString() {
return "Goods{" +
"goodsName='" + goodsName + '\'' +
", count=" + count +
'}';
}
}
创建生产者与消费者类:
eg:生产者类:
public class Producer implements Runnable {
private Goods goods;
public Producer(Goods goods) {
this.goods = goods;
}
@Override
public void run() {
try {
this.goods.set("阿玛尼限量联名口红");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
消费者类:
public class Consumer implements Runnable {
private Goods goods;
public Consumer(Goods goods) {
this.goods = goods;
}
@Override
public void run() {
try {
this.goods.get();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
测试类:
public class TestPC {
public static void main(String[] args) {
Goods goods = new Goods();
Thread produceThread = new Thread(new Producer(goods),"生产者线程");
Thread consumerThread = new Thread(new Consumer(goods),"消费者线程");
produceThread.start();
consumerThread.start();
}
}
运行结果如下: