生产、消费模型:
一、生产、消费模型:
在线程间通讯的时候,当在一个对象上调用wait()方法时,当前线程就会进入wait状态,直到收到另一个对象的notify()发出通知,才会执行下一部计算,而且线程在wait的时候,也可能被中断,这就是"生产/消费模型"
二、简单实现:
1.生产和消费线程用来操作的对象:
package 生产_消费模型; /** * 用来交换的数据对象模型 * @author Administrator * */ public class Student { int id; String name; public String toString(){ return id+"<>"+name; } }
2.生产线程:
package 生产_消费模型; import java.util.List; public class ProduceThread extends Thread { //与消费线程或以共同存取的对象列表 private List shareList; //用来标记的放入对象的每一个独立的编号 private static int count; //构造器参数是生产线程要放入数据的队列 public ProduceThread(List shareList){ this.shareList = shareList; } @Override public void run() { // TODO Auto-generated method stub //super.run(); System.out.println("生产线程已经启动:"+shareList.size()); while(true){ try { Thread.sleep(2000); synchronized (shareList) { while(shareList.size()>0){ shareList.wait(); } while(shareList.size()==0){ Student st = new Student(); count++; st.id = count; st.name="对象"+count; System.out.println("生产线程放入对象:"+st.toString()); shareList.add(st); shareList.notify(); } } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
通过构造函数把操作对象的List传进去,如果List里面有对象,就要wait,而当List里面没有对象,该生产线程就要产生一个,并发出notify的通知.并把操作的对象加入操作对象的List
3.消费线程:
package 生产_消费模型; import java.util.List; /** * 消费线程 * @author Administrator * */ public class CustomerThread extends Thread{ private List shareList; @Override public void run() { // TODO Auto-generated method stub //super.run(); System.out.println("消费线程已经启动:"+shareList.size()); while(true){ synchronized (shareList) { while (shareList.size()==0) { //如果没有,消费线程就要等待 try { shareList.wait(); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } while(shareList.size()>0){ System.out.println("消费线程取出:"+shareList.remove(0).toString()); //取出一个后,就发通知 shareList.notify(); } } } } public CustomerThread(List shareList){ this.shareList = shareList; } }
通过构造函数把操作对象的List传进去,当List里面没有对象时,消费线程也就没什么可以消费的了,就要进入wait状态,当List里面有对象时,消费线程就消费一个,并发出notify的通知。
4.Main:
package 生产_消费模型; import java.util.LinkedList; import java.util.List; /** * 主函数 * @author Administrator * */ public class Cb123456 { public static void main(String[] args) { //生产,消费线程交换的队列 List shareList = new LinkedList(); //启动生产线程 new ProduceThread(shareList).start(); //启动消费线程 new CustomerThread(shareList).start(); } }
三、运行结果:
四、结果分析:
1.Main里面,通过new关键字给LinkedList分配内存空间,同时实例化,但此时的LinkedList里面什么都没有,所以是生产线程先执行的
2.在控制台可以看见在输出结果的时候,生产线程和消费线程总是同时显示结果的.
五、补充:
1.LinkedList:
2.null和" "
其中null是表示没有地址.而" "表示是一个字符串,有地址的,但是字符串里面的内容却是空的,null就像没有锅,而" "表示有锅却没有米的
六、总结:
生产消费模型:当集合中没有对象时,生产线程会产生一个,并发出通知,然后消费线程就把它给消费了。
相关推荐
在这个场景中,“pp.rar_生产消费模型”显然指的是一个用于演示这一概念的代码实现,具体是通过烤羊肉串模型来展示的。烤羊肉串模型是一个形象化的比喻,它将羊肉串看作是产品,厨师(生产者)负责制作羊肉串,食客...
生产消费模型是另一种编程概念,常用于多线程环境。在这个模型中,生产者负责创建数据,消费者负责消耗数据。生产者和消费者之间需要协调工作,避免生产过快导致数据堆积,或者消费过快导致无数据可消费。这通常通过...
在计算机科学中,生产者-消费者模型是一种经典的并发编程问题,用于解决多个线程之间如何高效、安全地共享资源的问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。C++作为一门支持...
用pthread 实现 生产消费模型 /* * File : pc.c * * Title : Demo Producer/Consumer. * * Short : A solution to the producer consumer problem using * pthreads. * * Long : * * Author : Andrae ...
QT/C++11多线程、互斥/读写锁、多生产消费模型
本话题将深入探讨"生产者-消费者模型"(Producer-Consumer Model)在Windows多线程环境中的应用,以及如何利用关键代码段(Critical Section)和互斥量(Mutex)来实现线程同步。 生产者-消费者模型是一种经典的...
LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC语言实现生产者和消费者模型LinuxC...
**Qt入门练习项目——生产者消费者模型** 在编程领域,生产者消费者模型是一种常见的多线程同步问题的解决方案。这个模型通常用于处理数据流的异步处理,其中一个或多个线程(生产者)生成数据,而其他线程(消费者...
多线程实现生产者消费者模型:锁(Lock)、信号量(Semaphore、BoundedSemaphore)、条件(Condition)、队列(Queue)、事件(Event) 多进程程实现生产者消费者模型:信号量(Semaphore)、条件(Condition)、...
"多个消费者生产者模型"是一种典型的多线程同步问题的解决方案,它主要用于处理并发操作中的资源分配和协调。在这个模型中,"生产者"负责生成数据或任务,而"消费者"则负责处理这些数据或任务。接下来,我们将深入...
### 消费者生产者模型 C++ #### 一、代码概览 此代码段实现了一个典型的消费者生产者模型,利用 C++ 和 Windows API 进行线程管理和同步控制。主要功能包括: - 定义了一个最大缓冲区数量 (`MAX_BUFFER_NUM`) 为 ...
Java生产者消费者模型是多线程编程中一种经典的并发控制模型,它源于操作系统中的哲学思想,用于解决资源的共享和异步处理问题。在该模型中,"生产者"线程负责生成数据,而"消费者"线程则负责消费这些数据。两者之间...
在IT领域,生产者消费者模型是一种经典的并发编程模式,它源于操作系统理论,用于解决资源的高效利用和同步问题。在本案例中,该模型被应用于一个使用Qt框架开发的多进程环境中,使得生产者进程与消费者进程能有效地...
生产者消费者模型是一种多线程同步的经典设计模式,它源于操作系统中的进程通信概念,用于解决资源的高效利用和协同工作问题。在这个模型中,生产者线程负责生成数据,而消费者线程则负责消费这些数据。为了确保生产...
在多线程编程中,设计模式是解决特定问题的有效手段,其中之一便是生产者-消费者模型。这个模型描述了两个或多个线程之间的协作,其中一方(生产者)生成数据,另一方(消费者)消费这些数据。在Qt框架下,我们可以...
四、RocketMQ消费模型实现 1. 广播消费(Broadcasting):每个消费者都会收到所有的消息,适用于所有消费者都需要处理相同消息的场景。 2. 点对点消费(Point-to-Point):每个消息只被一个消费者消费,适用于处理...
在Java多线程编程中,消费者-生产者模型是一种经典的线程间通信模式,用于解决多线程环境下的数据共享问题。该模型涉及到两个主要的角色:生产者(Producer)和消费者(Consumer)。生产者负责创建数据,而消费者则...
生产者消费者模型是一种经典的线程同步问题,它模拟了实际生活中的生产过程和消费过程,使得生产者线程可以将数据生产出来,而消费者线程则负责消耗这些数据,两者之间通过共享数据结构进行协同工作。 生产者消费者...
生产者,消费者,线程同步,模型,锁
在C#编程中,"生产者消费者模型"是一种常见的多线程设计模式,它通过分离数据的生产和消费过程,使得生产者线程可以专心于创建数据,而消费者线程则专注于处理这些数据,两者互不干扰,提高了系统效率。在这个模型中...