备注:来自小可08年的纸笔记,因为纸张快烂了,故此誊抄于此,以备不时只需,有的代码菜到几点,仅供娱乐。
package nie.test.util.thread;
import java.util.List;
import java.util.Vector;
/** 多线程之 生产者消费者 一种
* @author niewj
*/
public class TestMultiThread {
public static void main(String[] args) {
MyContainer container = new MyContainer();
Producer p = new Producer(container);
Consumer c = new Consumer(container);
Thread t1 = new Thread(p);
Thread t2 = new Thread(c);
t1.start();
t2.start();
}
}
class MyContainer{
List<Object> lst = new Vector<Object>(); //承载容器
boolean flag = true; //标识位,默认为:无产品,可以生产了
/** 生产
* @param obj
* @throws InterruptedException
*/
synchronized public void push(Object obj) throws InterruptedException{
while(!flag){
wait();
}
lst.add(obj);
System.out.println("Produce One: "+obj);
flag = false;
notifyAll();
}
/** 消费
* @return
* @throws InterruptedException
*/
synchronized public Object pop() throws InterruptedException{
Object obj = null;
while(flag){
wait();
}
if(!lst.isEmpty()){
obj = lst.remove(0);
System.out.println("Consum One: "+obj);
flag = true;
notifyAll();
}else{
obj=null;
}
return obj;
}
}
class Consumer implements Runnable{
MyContainer con;
/** 初始化消费者的 容器 ,同生产者用同一个
* @param con
*/
public Consumer(MyContainer con) {
this.con = con;
}
@Override
public void run() {
while(true){
try {
Object obj = con.pop();
System.out.println(obj+" 被消费!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class Producer implements Runnable{
MyContainer con;
/** 初始化生产者 用到的 容器,同消费者用同一个
* @param con
*/
public Producer(MyContainer con) {
this.con = con;
}
@Override
public void run() {
while(true){
try {
Thread.sleep(1000);
Object obj = new Integer((int)(Math.random()*1000));; //产品
con.push(obj);
System.out.println(obj+" 被生产出来!");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
分享到:
相关推荐
通过以上步骤,我们可以在Delphi中实现一个多线程生产者消费者模式的应用。这种模式在处理大量数据输入和输出,以及需要高效利用系统资源的场景下尤其有用,如数据库导入导出、实时数据处理和网络通信等。理解并熟练...
综上所述,这个"操作系统课程设计多线程 生产者消费者问题"项目将涵盖Java多线程编程、并发控制、线程安全的数据结构和通信机制等多个重要知识点,对理解并发编程有极大的实践价值。在实际操作中,需要综合运用这些...
使用MFC相关的功能函数来模拟经典进程互斥和同步问题
Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...
java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...
在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...
本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...
Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...
创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue<String> queue; public Producer(BlockingQueue<String> queue) { this....
生产者-消费者问题是并发编程中的一个经典模型,它描述了两个或多个线程之间的协作,其中一个或多个线程(生产者)负责生成数据,而其他线程(消费者)则负责处理这些数据。在实际应用中,这可以对应于例如数据生成...
Java多线程生产者消费者基础示例,IT大厂如华为等基础面试中经常出现的Java基础笔试题目,使用最基本的线程同步、Notify及wait等实现最基本的生产者消费者例程,适用于Java编程初学者了解多线程、同步块、线程安全、...
这个项目提供了一个基础的多线程生产者消费者模型实现,可以帮助开发者理解如何在Java中实现并发编程,同时也为解决复杂并发问题提供了实践基础。通过分析和修改这个代码,我们可以深入学习多线程编程的细节,提升...
Java多线程生产者消费者模型实例详解 Java多线程生产者消费者模型是指在多线程环境下,生产者线程生产任务,消费者线程消费任务,而缓冲区是生产者和消费者之间的媒介。生产者消费者模型的主要组成部分包括生产者...
用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题
java多线程学习,生产者消费者问题示例
生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者负责消耗这些数据。为了使这个模式在多线程环境下安全运行,我们需要使用Java中的同步机制。 1. **...
Java多线程生产者消费者模式实现过程解析 Java多线程生产者消费者模式是指在Java编程中,使用多线程来实现生产者和消费者之间的数据交换 и处理的模式。该模式下,生产者负责产生数据,而消费者负责处理数据。这种...
用到互斥锁和多线程,实现简单,易于理解。。。
生产者消费者问题是多线程编程中的一个经典案例,它展示了如何通过共享资源在并发环境中实现线程间的协调。在这个问题中,"生产者"线程负责生成数据,而"消费者"线程则负责消费这些数据。MFC(Microsoft Foundation ...
生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...