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();
}
}
}
}