`

多线程(一)生产者消费者问题!!!(原创)

 
阅读更多

 

package test;
/**
 * @author  E-mail:xhf@126.com
 * @version 创建时间:2011-11-21 上午09:14:58
 * 类说明
 */
public class CaoYang {
	static public void main(String[] args){
		
		Loufeng loufeng=new Loufeng(3) ;
		
		new XiaoJie("嘉新",loufeng,1000).start() ;
		new XiaoJie("萝莉",loufeng,1000).start() ;
		new XiaoJie("诗情",loufeng,1000).start() ;
		new KeRen("张三",loufeng,1000).start() ;
		new KeRen("李四",loufeng,1000).start() ;
		new KeRen("王五",loufeng,1000).start() ;
		
		
		
		
	}

}

 package test;

import java.util.Random;

/**
 * @author E-mail:xhf@126.com
 * @version 创建时间:2011-11-21 上午09:14:04
 * 类说明
 */
public class KeRen extends Thread{
	
	private final Random random ;
	private final Loufeng loufeng ;
	public KeRen(String name ,Loufeng loufeng,long l){
		super(name) ;
		this.loufeng=loufeng ;
		random=new Random(l) ;
	}
	
	public void run(){
		
		try{
			while(true){
				String cake=loufeng.get() ;
				System.out.println("完成交易:"+cake) ;
				Thread.sleep(random.nextInt(1000)) ;
			}
		}catch(Exception e){
			e.printStackTrace() ;
		}
		
	}
	
	

}

 package test;

/**
 * @author  E-mail:xhf@126.com
 * @version 创建时间:2011-11-21 上午09:14:42
 * 类说明 
 */
public class Loufeng {
	
	
	private int count ;
	private int zou  ;//当前要出台的
	private  int hui ;//当前新回来的
	private final String buffer[] ;
	public Loufeng(Integer sum){
		this.buffer=new String[3] ;
		this.count=0 ;
		this.zou=0 ;
		this.hui=0 ;
	}
	
	public synchronized void put(String xiaoj) throws InterruptedException{
		System.out.println(Thread.currentThread().getName()+xiaoj) ;
		while(count>=buffer.length){
			wait() ;
		}
		
		buffer[hui]=xiaoj ;
		hui=(hui+1)%buffer.length ;
		
		count++ ;
		System.out.println("库存量=============="+count) ;
		this.notifyAll() ;
		
	}
	public synchronized String get() throws InterruptedException{
		while(count<=0){
			wait() ;
		}
		
		String taak=buffer[zou] ;
		zou=(zou+1)%buffer.length ;
		count-- ;
		this.notifyAll() ;
		System.out.println(Thread.currentThread().getName()+"准备带走"+taak) ;
		return taak; 
		}
	

}

 package test;

import java.util.Random;

/**
 * @author  E-mail:xhf@126.com
 * @version 创建时间:2011-11-21 上午09:20:59
 * 类说明
 */
public class XiaoJie extends Thread{
	private final Random random ;
	private final Loufeng  loufeng ;
	private static int i=0 ;
	public XiaoJie(String name ,Loufeng loufeng,long feed){
		super(name) ;
		this.loufeng=loufeng ;
		this.random=new Random(feed) ;
	}
	public void run(){
		
		while(true){
			try {
				Thread.sleep(random.nextInt(1000)) ;
				String cha="序号"+getid()+"===姓名:"+this.getName();
				loufeng.put(cha) ;
				
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
			
		}
	}
	public static final int getid(){
		return i++ ;
	}

}

 

 

 

分享到:
评论

相关推荐

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

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

    线程经典题目<生产-消费>

    本话题将深入探讨一个经典的多线程问题——“生产者-消费者”模型,以及如何在VC++环境下利用信号和互斥量来解决这个问题。 生产者-消费者问题是一个典型的同步问题,涉及两个或多个线程之间的协作:生产者线程负责...

    【原创】C#多线程_跨线程窗体同步_进度条_生产消费(源代码)

    本项目"【原创】C#多线程_跨线程窗体同步_进度条_生产消费(源代码)"就是针对这一主题的一个实践示例,旨在帮助开发者理解如何在WinForm应用中实现多线程操作,并有效地管理跨线程数据安全以及展示进度。...

    多线程精品资源--这是RedSpider社区成员原创与维护的Java多线程系列文章。.zip

    - **BlockingQueue**:作为一种高级的线程间通信工具,它可以实现生产者消费者模型,简化并发编程。 5. **线程池** - **ExecutorService**:Java的Executor框架提供了线程池服务,可以有效地管理和控制线程,避免...

    操作系统课程设计指导书

    现代操作系统中,多线程的应用越来越广泛,如何在多线程环境中处理好同步和互斥问题,是操作系统课程设计中的一个重点。学生需要创建包含多个线程的进程,进行不同的任务,主线程则负责协调。这不仅锻炼了学生对多...

    大工20秋《操作系统》大作业题目及要求.docx

    - **生产者-消费者问题**:这是多线程编程中的经典问题,生产者负责生成数据,消费者负责消费数据。设计时需考虑如何避免数据不一致(同步)和资源争抢(互斥)。流程图能直观展示生产者和消费者的交互,源代码或伪...

    reactor指南中文版

    这种性能的背后,是它在内存管理上的优化,通过减少或避免内存垃圾的产生,有效地解决消费者处理消息效率低于生产者时可能导致的溢出问题。同时,Reactor还通过非阻塞流的方式,提供尽可能的异步操作,以减少线程的...

    2021面试指南(含各大简历模板)资料2.zip

    Kafka面试专题.docx可能涵盖Kafka的基本概念、架构、生产者消费者模型、消息持久化、高可用性及性能调优等内容。 4. **Spring Cloud与Docker实战微服务**:使用SpringCloud和Docker实战微服务.pdf可能探讨如何利用...

Global site tag (gtag.js) - Google Analytics