博客概述
生产者消费者模式是MQ的设计思想。这个模式也是一个非常经典的多线程设计模式,我们在实际开发中应用非常广泛的思想理念。在生产消费模式中,通常有两类线程,即若干个生产者线程,若干个消费者线程,生产者负责提交用户需求,消费者负责处理用户需求,在生产者消费者之间通过内存缓冲区进行通信。
用的最多就是消息中间件Mq。mq:消息队列。是一个数据缓存空间。多个数据生产者把数据放在缓存空间。生产者:产生数据。从java代码级别分析,生产者应该持有消息队列,消费者也是。
代码实现
主函数
public static void main(String[] args) throws Exception {
//内存缓冲区,对于无界阻塞队列,内部实现分离锁,实现读写分离,从而实现生产消费完全并行。
BlockingQueue<Data> queue = new LinkedBlockingQueue<Data>(10);
//生产者
Provider p1 = new Provider(queue);
Provider p2 = new Provider(queue);
Provider p3 = new Provider(queue);
//消费者
Consumer c1 = new Consumer(queue);
Consumer c2 = new Consumer(queue);
Consumer c3 = new Consumer(queue);
//创建线程池运行,这是一个缓存的线程池,可以创建无穷大的线程,没有任务的时候不创建线程。空闲线程存活时间为60s(默认值)
ExecutorService cachePool = Executors.newCachedThreadPool();
cachePool.execute(p1);
cachePool.execute(p2);
cachePool.execute(p3);
cachePool.ex