class Clerk {
private int num = 0;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
class Producer extends Thread {
private Clerk clerk;
Producer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
while (true) {
synchronized (clerk) {
if (clerk.getNum() <= 20) {
clerk.setNum(clerk.getNum() + 1);
System.out.println(Thread.currentThread().getName() + "当前数量" + clerk.getNum());
} else {
try {
clerk.notifyAll();
clerk.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
class Customer extends java.lang.Thread {
private Clerk clerk;
Customer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
while (true) {
synchronized (clerk) {
if (clerk.getNum() >= 21) {
clerk.setNum(clerk.getNum() - 1);
System.out.println(Thread.currentThread().getName() + "当前数量" + clerk.getNum());
}else{
try {
clerk.notifyAll();
clerk.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
}
public class Main {
public static void main(String[] args) {
Clerk clerk = new Clerk();
Producer producer = new Producer(clerk);
Customer customer = new Customer(clerk);
producer.setName("生产者");
customer.setName("消费者");
producer.start();
customer.start();
}
}