写在前面
在实际开发过程中,经常会碰到如下场景:某个模块负责产生数据,然后经由某个共享的缓冲区进行流转,最后这些数据由另一个模块来负责处理。产生数据的模块,就形象地称为生产者;而处理数据的模块,就称为消费者,中间的仓库可以抽象成任何缓冲区类型的存储介质。
那么这种模型有什么优点呢?第一是解耦,可以将生产者和消费者分隔开,耦合度降低;二是支持并发,生产者把制造出来的数据往缓冲区一丢,就可以再去生产下一个数据,基本上不用依赖消费者的处理速度;三是可以协调生产者和消费者的速度差异,不需要强制二者速率一致。
生产者-消费者模型
import java.util.LinkedList;
import java.util.concurrent.TimeUnit;
public class ProducerConsumer {
public static void main(String[] args) throws InterruptedException {
final int maxSize = 3;
final LinkedList<String> queue = new LinkedList<String>();
final Thread producer = new Thread("producer-thread") {
@Override
public void run() {
while(true) {
synchronized (queue) {
while (queue