生产者消费者模型
public class Main{
public static void main(String[] args) {
EventStore eventStore = new EventStore();
Producer producer = new Producer(eventStore);
Consumer consumer = new Consumer(eventStore);
new Thread(producer).start();
new Thread(producer).start();
new Thread(producer).start();
new Thread(consumer).start();
new Thread(consumer).start();
new Thread(consumer).start();
}
}
class Producer implements Runnable{
private EventStore eventStore;
public Producer(EventStore eventStore) {
this.eventStore = eventStore;
}
@Override
public void run() {
while (true) {
eventStore.push();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Consumer implements Runnable{
private EventStore eventStore;
public Consumer(EventStore eventStore) {
this.eventStore = eventStore;
}
@Override
public void run() {
while (true) {
eventStore.take();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class EventStore {
private int count;
public final int MAX_COUNT = 10;
public synchronized void push() {
while (count >= MAX_COUNT) {
try {
System.out.println(Thread.currentThread().getName() + " 库存已满, 生产者等待中...");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count++;
System.out.println(Thread.currentThread().getName() + " 生产者生产, 当前库存为 : " + count);
notifyAll();
}
public synchronized void take() {
while (count <= 0) {
try {
System.out.println(Thread.currentThread().getName() + " 库存已空, 消费者等待中...");
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
count--;
System.out.println(Thread.currentThread().getName() + " 消费者消费, 当前库存为 : " + count);
notifyAll();
}
}