题目:
生产者(Productor)将产品交给店员(Clerk),而消费者(Customer)从店员处 取走产品,店员一次只能持有固定数量的产品,如果生产者试图 生产更多的产品,店员会叫生产者停一下,如果店中有空位放产品了再通 知生产者继续生产;如果店中没有产品了,店员会告诉消费者等一下,如果店中有产品了再通知消费者来取走产品。
public class ProductTest {
public static void main(String[] args) {
Clerk clerk=new Clerk();
//生产者线程
Thread prosuctor =new Thread(new Productor(clerk));
//消费者线程
Thread consumer =new Thread(new Consumer(clerk));
prosuctor.start();
consumer.start();
}
}
//店员
class Clerk{
private int product=0;
public synchronized void add(){
//商品数量达到20暂停生产
if(product>=20){
try {
wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}else {
product++;
System.out.println("add product"+product);
notifyAll();
}
}
public synchronized void get(){
//商品数量为0则无法购买
if (this.product<=0){
try {
wait();
}catch (InterruptedException e){
e.printStackTrace();
}
}else {
System.out.println("delete product"+product);
product--;
notifyAll();
}
}
}
//生产者
class Productor implements Runnable{
Clerk clerk;
Productor(Clerk clerk){
this.clerk=clerk;
}
@Override
public void run() {
//提示该线程在运行
System.out.println("Productor");
while (true){
try {
Thread.sleep((int)Math.random()*1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
//生产
clerk.add();
}
}
}
//消费者
class Consumer implements Runnable{
Clerk clerk;
Consumer(Clerk clerk){
this.clerk=clerk;
}
@Override
public void run() {
//提示该线程在运行
System.out.println("Consumer");
while (true){
try {
Thread.sleep((int)Math.random()*1000);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
//消费
clerk.get();
}
}
}