生产者消费者模式见上图所示。
blog宗旨:用图说话。
代码示例:
package com.huan;
public class ProduceConsumer {
public static void main(String[] args) {
Middleware middleware = new Middleware();
new Thread(new Producer(middleware)).start();
new Thread(new Consumer(middleware)).start();
}
}
class Producer implements Runnable{
private Middleware middleware;
public Producer(Middleware middleware){
this.middleware = middleware;
}
public void produce() throws Exception{
while(true){
middleware.put();
}
}
@Override
public void run() {
try {
produce();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Consumer implements Runnable{
private Middleware middleware;
public Consumer(Middleware middleware){
this.middleware = middleware;
}
public void consume() throws Exception{
while(true){
middleware.get();
}
}
@Override
public void run() {
try {
consume();
} catch (Exception e) {
e.printStackTrace();
}
}
}
class Middleware{
private static final int MAX_SIZE = 10;
private int[] storage = new int[MAX_SIZE];
private int index = 0;
public synchronized void put() throws Exception{
if(index == MAX_SIZE){
wait();
}
storage[index] = index;
System.out.println("生产了:" + index);
index++;
notify();
}
public synchronized void get() throws Exception{
if(index == 0){
wait();
}
index--;
System.out.println("消费了:" + storage[index]);
notify();
}
}
代码缺陷:当多个消费者时,或者多个生产者时,上例代码需要完善。