代码:
package com.dmy.demo.test.producerConsumer;
public class ProducerConsumer {
static class Product {
private int count;
private boolean available = false;
public synchronized int get() {
while (available == false) {
try {
wait();
} catch (InterruptedException e) {
}
}
available = false;
notifyAll();
return count;
}
public synchronized void put(int value) {
while (available == true) {
try {
wait();
} catch (InterruptedException e) {
}
}
count = value;
available = true;
notifyAll();
}
}
static class Producer extends Thread {
private Product product;
private int number;
public Producer(Product product, int number) {
this.product = product;
this.number = number;
}
public void run() {
for (int i = 0; i < 10; i++) {
product.put(i);
System.out.println("生产者 #" + this.number + "put:" + i);
try {
sleep((int) Math.random() * 100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
static class Consumer extends Thread {
private Product product;
private int number;
public Consumer(Product product, int number) {
this.product = product;
this.number = number;
}
public void run() {
int value;
for (int i = 0; i < 10; i++) {
value = product.get();
System.out.println("消费者 #" + this.number + "get:" + value);
}
}
}
public static void main(String[] args) {
Product product = new Product();
Producer producer = new Producer(product, 1);
Consumer consumer = new Consumer(product, 1);
producer.start();
consumer.start();
}
}
结果:
生产者 #1put:0
消费者 #1get:0
生产者 #1put:1
消费者 #1get:1
生产者 #1put:2
消费者 #1get:2
生产者 #1put:3
消费者 #1get:3
生产者 #1put:4
消费者 #1get:4
生产者 #1put:5
消费者 #1get:5
生产者 #1put:6
消费者 #1get:6
生产者 #1put:7
消费者 #1get:7
生产者 #1put:8
消费者 #1get:8
生产者 #1put:9
消费者 #1get:9