完整代码
//仓库
class WareHouse {
//设定库存30件
public static int storeCount = 30;
}
public class Clerk {
//如果Consumer是通过Runnable接口方式实现多线程,则该类设置成static
public synchronized void consumeProducter() {
if (WareHouse.storeCount < 20) {
notify();
WareHouse.storeCount++;
System.out.println(Thread.currentThread().getName()
+ "生产第" + WareHouse.storeCount + "个产品");
} else {
//等待生产
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
//如果Producer是通过Runnable接口方式实现多线程,则该类设置成static
public synchronized void produceProducter() {
if (WareHouse.storeCount > 0) {
notify();
System.out.println(Thread.currentThread().getName()
+ "消费第" + WareHouse.storeCount + "个产品");
} else {
//等待消费
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Productor extends Thread {
Clerk clerk = new Clerk();
public Productor(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
clerk.produceProducter();
}
}
}
class Consumer extends Thread {
Clerk clerk = new Clerk();
public Consumer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
clerk.consumeProducter();
}
}
}
class ClerkTest {
public static void main(String[] args) {
Clerk clerk = new Clerk();
Productor productor1 = new Productor(clerk);
productor1.setName("生产者1");
productor1.start();
Productor productor2 = new Productor(clerk);
productor2.setName("生产者2");
productor2.start();
Consumer consumer1 = new Consumer(clerk);
consumer1.setName("消费者1");
consumer1.start();
}
}