`
androider
  • 浏览: 751709 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

转:线程的生产和消费模式

    博客分类:
  • Java
 
阅读更多

public class  ProducerConsumer{
	public static void main(String[] args){
		SyncStack ss = new SyncStack();
		Producer p = new Producer(ss);
		Consumer c = new Consumer(ss);
		new Thread(p).start();
		new Thread(c).start();
	}
}
 
class Wotou{
	int id;
	Wotou(int id){
		this.id = id;
	}
 
	public String toString(){
		return "Wotou:"+id;
	}
}
 
class SyncStack{
	int index = 0;
	Wotou[] arrWT = new Wotou[6];
 
	public synchronized void push(Wotou wt){
		while(index == arrWT.length){
			try {
				this.wait();
			} catch (InterruptedException e) {
				System.out.println("SyncStack push wait被打断\n"+
						e.getMessage());
			}
		}
 
		this.notify();		//若有多个方法可用notifyAll()
		arrWT[index] = wt;
		index++;
	}
 
	public synchronized Wotou pop(){
		while(index == 0){
			try{
				this.wait();
			}catch(InterruptedException e){
				System.out.println("SyncStack pop wait被打断\n"+
						e.getMessage());
			}
 
		}
		this.notify();
		index--;
		return arrWT[index];
	}
}
 
class Producer implements Runnable{
	SyncStack ss = null;
	Producer(SyncStack ss){
		this.ss = ss;
	}
 
	public void run(){
		for(int i=0; i<20; i++){
			Wotou wt = new Wotou(i);
			ss.push(wt);
			System.out.println("生产了:" + wt);
			try{
				Thread.sleep((int)(100*Math.random()));
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
	}
}
 
class Consumer implements Runnable{
	SyncStack ss = null;
	Consumer(SyncStack ss){
		this.ss = ss;
	}
	public void run(){
		for(int i=0; i<20; i++){
			Wotou wt = ss.pop();
			System.out.println("消费了:" + wt);
			try{
				Thread.sleep((int)(100*Math.random()));
			}catch(InterruptedException e){
				e.printStackTrace();
			}
		}
	}
}
 
分享到:
评论

相关推荐

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

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

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

    生产者和消费者模式是多线程编程中一个经典的设计模式,它主要解决的是在多线程环境下资源的有效利用和同步问题。在这个模式中,生产者负责生成数据,而消费者负责消费这些数据。为了保证生产与消费的平衡以及避免...

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

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

    Java多线程 生产者-消费者模式

    生产者-消费者模式是一种经典的多线程设计模式,用于解决数据共享问题,尤其是在一个线程生产数据而另一个线程消费数据的情况下。在这个模式中,生产者负责生成数据并放入共享的数据结构(如队列),而消费者则从这...

    QT/C++多线程练习:单生产者多消费者(源码)

    主线程、生产者线程(一)、消费者管理线程(一)、消费者线程(多),以及一些全局变量。 主线程职责:UI控件的控制和显示、控制生产者:调节生产的速度和暂停与继续、控制消费 生产者线程职责:根据商品数量调控...

    多线程生产者消费者模式

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

    Linux 多线程实现生产者消费者模式.pdf

    在生产者消费者模式中,通常需要多个生产者和消费者线程,这些线程需要根据实际情况合理创建。 互斥量(Mutex)是一种简单的锁机制,用于保证共享数据在多线程访问时的互斥性,避免竞态条件。在生产者消费者模型中...

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

    Java多线程编程是开发高...总结一下,Java中的生产者消费者模式利用了`BlockingQueue`等并发工具,实现了线程间的同步和协作,提高了程序的并发性能。理解并熟练运用这种模式,对于提升Java多线程编程的能力至关重要。

    c#多线程之生产者消费者

    综上所述,C#中的生产者消费者模式涉及线程同步、数据结构、异常处理等多个知识点,理解和熟练运用这些概念对于编写高效、可靠的并发程序至关重要。通过实践和优化,我们可以创建出能充分利用多核处理器能力、运行...

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

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

    C++ 多线程通信方式简介并结合生产者-消费者模式代码实现

    在C++编程中,多线程通信是一种关键的...生产者-消费者模式是一种常用的线程同步策略,能够有效地解决数据生产和消费的问题。在实际编程中,理解并熟练掌握这些概念和技术,对于提升C++多线程程序的设计能力至关重要。

    生产者 消费者 模式 c++

    生产者消费者模式是一种多线程或并发编程中的经典设计模式,它主要用于解决系统资源的高效利用和同步问题。在C++中实现生产者消费者模式,我们可以利用C++11及更高版本提供的线程库()、互斥量()、条件变量()等...

    多线程实现生产者消费者

    8. **死锁和饥饿**:在实现多线程生产者消费者模型时,必须警惕可能出现的死锁和饥饿问题。死锁是两个或更多线程相互等待对方释放资源导致的僵局,而饥饿则是指某一线程因为资源分配不公平而无法获得执行的机会。...

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

    在这个“生产者与消费者”模式中,我们主要关注如何安全地共享资源,避免线程间的竞态条件和死锁。 生产者消费者模式是一种设计模式,它描述了两个不同类型的线程如何协作完成工作:生产者负责生成数据,而消费者...

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

    操作系统课程设计中的“生产者-消费者问题”是一个经典的并发编程模型,主要用来演示如何在多线程环境下协调生产者和消费者的行为,以达到资源的有效利用和避免数据竞争。在这个Java实现的小程序中,我们将深入探讨...

    多线程_生产者与消费者模式示例

    在描述中提到的链接(&lt;https://ruyi574812039.iteye.com/blog/2097988&gt;),博主分享了一个关于多线程生产者与消费者模式的具体实现案例。虽然具体代码没有给出,但我们可以根据常见的实现方式来解析这个模式。 1. *...

    生产消费者队列(c#),用于线程的队列自动同步

    为了更好地理解和使用这个生产消费者队列,你可以通过创建一个生产者线程生成随机任务,同时创建多个消费者线程来处理这些任务。例如: ```csharp var workQueue = new WorkQueue(); // 生产者线程 Task.Run(() =&gt;...

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

    Java多线程生产者消费者模式是指在Java编程中,使用多线程来实现生产者和消费者之间的数据交换 и处理的模式。该模式下,生产者负责产生数据,而消费者负责处理数据。这种模式可以提高系统的性能和效率,特别是在高...

    生产者消费者为模型的多线程编程c#原创

    在C#编程中,"生产者消费者模型"是一种常见的多线程设计模式,它通过分离数据的生产和消费过程,使得生产者线程可以专心于创建数据,而消费者线程则专注于处理这些数据,两者互不干扰,提高了系统效率。在这个模型中...

Global site tag (gtag.js) - Google Analytics