多线程生产者消费者怎么实现,线程生产者消费者 java
00-1010 1.生产者-消费者模型2。生产者-消费者模型的实现。生产者-消费者模型的作用是什么?总结问题:
1.什么是阻塞队列?如何使用阻塞队列实现生产者-消费者模型?
2.生产者-消费者模型的作用是什么?
00-1010在生产者-消费者模型中,通常有两种类型的线程,即生产者线程(几个)和消费者线程(几个)。生产者线程向消息队列添加数据,而消费者线程从消息队列中消费数据。生产者、消费者和消息队列之间的关系结构图如下图所示:
(1)消息队列可以用来平衡线程资源的生产和消耗;
(2)生产者只负责生成结果数据,并不关心如何处理数据,而消费者专注于处理结果数据;
(3)消息队列的容量有限。消息队列满后,生产者不能再添加任何数据;当消息队列为空时,消费者不能再取出数据;
(4)消息队列是线程安全的,在消息队列并发操作的过程中不能出现数据不一致的情况;或者多个线程并发更改共享数据后,不会造成脏数据;
(5)JDK各种堵队都采用这种模式;
目录
1、消息队列中存放的消息类:
/* * *存储在消息队列中的消息类*/final public class message { private int id;private int值;公共消息(int id,int value){ this . id=id;this.value=value} public int getId(){ return id;} public int getValue() {返回值;} }2、实现阻塞队列(消息队列) :
导入lombok . extern . SLF 4j . SLF 4j;导入Java . util . linked list;/* * *实现一个阻塞队列(message queue)实现java线程之间的通信*/@ slf4jpublic类消息队列{//消息队列private int capacity的容量;//message queue linked list message message queue=newlinked list();//设置消息队列公共消息队列的容量(int capacity) {this。容量=容量;}//获取消息public message take(){ synchronized(message queue){//如果消息队列为空while(message queue . isempty()){ try { log . debug(队列为空,消费者线程正在等待);message queue . wait();} catch(interrupted exception e){ e . printstacktrace();} } Message Message=Message queue . remove first();Log.debug(消费的消息{} ,message);//到这里,说明消息队列不是null message queue . notifyall();返回消息;}}//Put消息public void Put(message message){ synchronized(message queue){//如果消息队列已满while(message queue . size()==capacity){ try { log . debug(队列已满,生产者线程正在等待);message queue . wait();} catch(interrupted exception e){ e . printstacktrace();} } message queue . add last(message);Log.debug(产生的消息{} ,message);//此处表示消息队列对messageQueue.notifyAll()不满意;} } }3、测试:
public class Main { public static void Main(String[]args){ message queue queue=new message queue(2);for(int I=0;i3;I){ int id=I;新线程(()-{ queue.put(新消息(id,id));}、‘制作人’)。start();}新线程(()-{ while(true){ try { Thread . sleep(1000);} catch(interrupted exception e){ e . printstacktrace();} Message Message=queue . take();}},‘消费者’)。start();} }执行结果:
1:31336028.488[生成器]Debug com . example . test . message queue-生成的消息com . example . test . message @ 54309 a 751533:28.507[生成器]Debug com . example . test . message queue-生成的消息com . example . test . message @ 5091538915336031:28.507[生成器]Debug com . example . test . message queue-message queue
00-1010 (1)通过平衡生产者的生产能力和消费者的消费能力,提高整个系统的运行效率;
(2)脱钩。脱钩是指生产者和消费者接触越少,接触越少,越能独立发展,不受相互制约;
1. 生产者消费者模型
本文到此为止。希望它能帮到你,也希望你能多关注更多的盛行它的内容!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。