描述:
有 生产者、消费者、产品。要求产品的数量大于20生产者暂停生产;产品为0,消费者暂停消费,有产品则可以消费
代码:
- 产品类:
class ProductNum{
private int number=0;
public synchronized void Import() {
if(number<20) {
number++;
notify();
}else {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void Export() {
if(number>0) {
number--;
notify();
}else {
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
- 生产者类:
class Producer implements Runnable{
ProductNum pro;
public Producer(ProductNum pro) {
super();
this.pro = pro;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ": 生产了一件商品");
pro.Import();
}
}
}
- 消费者类:
class Consumer implements Runnable{
ProductNum pro;
public Consumer(ProductNum pro) {
super();
this.pro = pro;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ": 消费了一件商品");
pro.Export();
}
}
}
- 主类:
public class Thread_Exercise_ConsumerProducer {
public static void main(String[] args) {
ProductNum productNum = new ProductNum();
Producer producer = new Producer(productNum);
Consumer consumer = new Consumer(productNum);
Thread thread1 = new Thread(producer);
Thread thread2 = new Thread(consumer);
thread1.setName("生产者");
thread2.setName("消费者");
thread1.start();
thread2.start();
}
}
结果: