package com.wzc.test;
//生产者消费者问题
public class Test03 {
public static void main(String[] args) {
Clerk clerk=new Clerk();
Costumer c1=new Costumer(clerk);
Procedure p1=new Procedure(clerk);
c1.setName("消费者1号");
p1.setName("生产者1号");
c1.start();
p1.start();
}
}
class Costumer extends Thread{
private Clerk clerk;
public Costumer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"开始消费........");
while(true){
clerk.ConsumerP();
}
}
}
class Procedure extends Thread{
private Clerk clerk;
public Procedure(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName()+"开始生产........");
while(true){
clerk.Production();
}
}
}
class Clerk{
private static int num=0;
public synchronized void Production(){
if(num<20){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
num++;
System.out.println(Thread.currentThread().getName()+"正在生产第"+num+"个产品");
notify();
}else{
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void ConsumerP(){
if(num>0){
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"正在消费第"+num+"个产品");
num--;
notify();
}else{
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}