`
niewj
  • 浏览: 6729 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

多线程,生产者消费者

 
阅读更多

备注:来自小可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();
			}
		}
	}
}
 

 

0
0
分享到:
评论

相关推荐

    多线程生产者消费者模式

    通过以上步骤,我们可以在Delphi中实现一个多线程生产者消费者模式的应用。这种模式在处理大量数据输入和输出,以及需要高效利用系统资源的场景下尤其有用,如数据库导入导出、实时数据处理和网络通信等。理解并熟练...

    操作系统课程设计多线程 生产者消费者问题

    综上所述,这个"操作系统课程设计多线程 生产者消费者问题"项目将涵盖Java多线程编程、并发控制、线程安全的数据结构和通信机制等多个重要知识点,对理解并发编程有极大的实践价值。在实际操作中,需要综合运用这些...

    C++实现多线程生产者消费者

    使用MFC相关的功能函数来模拟经典进程互斥和同步问题

    java 多线程生产者消费者模型demo

    Java多线程生产者消费者模型是一种典型的线程协作模式,用于解决并发编程中资源的高效利用和同步问题。在这个模型中,"生产者"线程负责生成数据,而"消费者"线程则负责处理这些数据。为了实现这种模式,Java提供了...

    java 多线程 生产者消费者模式源码

    java 多线程 生产者消费者模式,多个生产者对多个消费者,使用jdk 线程池及 BlockingQueue实现,解决了待生产的任务生产完成后,正常终止所有线程,避免线程(特别是消费者线程)因阻塞而无限等待的情况。源码中还简单...

    java多线程实现生产者和消费者

    在并发编程中,"生产者-消费者"模式是一种经典的解决问题的范式,用于协调两个或更多线程间的协作,其中一部分线程(生产者)生成数据,另一部分线程(消费者)消费这些数据。 生产者-消费者模型的核心在于共享资源...

    Java多线程实现生产者消费者

    本示例中的“生产者-消费者”模型是一种经典的多线程问题,它模拟了实际生产环境中的资源分配与消耗过程。下面我们将详细探讨如何在Java中实现这个模型。 首先,我们要理解生产者-消费者模型的基本概念。在这个模型...

    java 多线程 生产者消费者模式

    Java多线程编程是开发高并发、高性能应用的关键技术之一,而生产者消费者模式是多线程编程中常用的一种设计模式。它通过分离数据的生产和消费过程,实现了线程间的协同工作,有效避免了资源的竞争和浪费。在这个模式...

    生产者和消费者模式多线程

    创建一个简单的生产者消费者模型,可以使用以下伪代码: ```java class Producer implements Runnable { private final BlockingQueue&lt;String&gt; queue; public Producer(BlockingQueue&lt;String&gt; queue) { this....

    12.2 Qt5多线程:使用信号量实现生产者和消费者

    生产者-消费者问题是并发编程中的一个经典模型,它描述了两个或多个线程之间的协作,其中一个或多个线程(生产者)负责生成数据,而其他线程(消费者)则负责处理这些数据。在实际应用中,这可以对应于例如数据生成...

    Java多线程生产者消费者例程

    Java多线程生产者消费者基础示例,IT大厂如华为等基础面试中经常出现的Java基础笔试题目,使用最基本的线程同步、Notify及wait等实现最基本的生产者消费者例程,适用于Java编程初学者了解多线程、同步块、线程安全、...

    多线程实现生产者消费者

    这个项目提供了一个基础的多线程生产者消费者模型实现,可以帮助开发者理解如何在Java中实现并发编程,同时也为解决复杂并发问题提供了实践基础。通过分析和修改这个代码,我们可以深入学习多线程编程的细节,提升...

    Java多线程 生产者消费者模型实例详解

    Java多线程生产者消费者模型实例详解 Java多线程生产者消费者模型是指在多线程环境下,生产者线程生产任务,消费者线程消费任务,而缓冲区是生产者和消费者之间的媒介。生产者消费者模型的主要组成部分包括生产者...

    java多线程实现生产者消费者问题

    用java多线程,实现生产者消费者同步和互斥的问题,操作系统中的经典问题

    java多线程生产者消费者问题示例

    java多线程学习,生产者消费者问题示例

    java多线程(生产者与消费者)

    生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者负责消耗这些数据。为了使这个模式在多线程环境下安全运行,我们需要使用Java中的同步机制。 1. **...

    Java多线程生产者消费者模式实现过程解析

    Java多线程生产者消费者模式实现过程解析 Java多线程生产者消费者模式是指在Java编程中,使用多线程来实现生产者和消费者之间的数据交换 и处理的模式。该模式下,生产者负责产生数据,而消费者负责处理数据。这种...

    生产者消费者问题多线程实现

    用到互斥锁和多线程,实现简单,易于理解。。。

    生产者消费者问题 MFC

    生产者消费者问题是多线程编程中的一个经典案例,它展示了如何通过共享资源在并发环境中实现线程间的协调。在这个问题中,"生产者"线程负责生成数据,而"消费者"线程则负责消费这些数据。MFC(Microsoft Foundation ...

    多线程简易实现生产者消费者模式

    生产者消费者模式是一种经典的多线程同步问题解决方案,它源于现实世界中的生产流水线,用于描述生产者(Producer)和消费者(Consumer)之间的协作关系。在这个模式中,生产者负责生成产品并放入仓库,而消费者则从...

Global site tag (gtag.js) - Google Analytics