版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29622845/article/details/89328084
public class ThreadConsumerProducter {
public static void main(String[] args) {
Clerk clerk = new Clerk();
Consumer consumer = new Consumer(clerk);
Producer producer = new Producer(clerk);
consumer.setName("消费者1");
producer.setName("生产者1");
consumer.start();
producer.start();
}
}
//消费者
class Consumer extends Thread {
private Clerk clerk;
public Consumer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
while (true) {
clerk.consumption();
}
}
}
//生产者
class Producer extends Thread {
private Clerk clerk;
public Producer(Clerk clerk) {
this.clerk = clerk;
}
@Override
public void run() {
while (true) {
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
clerk.produce();
}
}
}
//店员
class Clerk {
private int count = 0;
public synchronized void produce() {
//小于20,生产就完了
if (count < 20) {
count++;
System.out.println(Thread.currentThread().getName() + "生产第" + count + "个产品");
notify();
} else {
//等于20
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void consumption() {
//小于20,生产就完了
if (count > 0) {
count--;
System.out.println(Thread.currentThread().getName() + "消费第" + count + "个产品");
notify();
} else {
//等于0
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}