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#编程中,"生产者消费者模型"是一种常见的多线程设计模式,它通过分离数据的生产和消费过程,使得生产者线程可以专心于创建数据,而消费者线程则专注于处理这些数据,两者互不干扰,提高了系统效率。在这个模型中...
本话题将深入探讨一个经典的多线程问题——“生产者-消费者”模型,以及如何在VC++环境下利用信号和互斥量来解决这个问题。 生产者-消费者问题是一个典型的同步问题,涉及两个或多个线程之间的协作:生产者线程负责...
本项目"【原创】C#多线程_跨线程窗体同步_进度条_生产消费(源代码)"就是针对这一主题的一个实践示例,旨在帮助开发者理解如何在WinForm应用中实现多线程操作,并有效地管理跨线程数据安全以及展示进度。...
- **BlockingQueue**:作为一种高级的线程间通信工具,它可以实现生产者消费者模型,简化并发编程。 5. **线程池** - **ExecutorService**:Java的Executor框架提供了线程池服务,可以有效地管理和控制线程,避免...
现代操作系统中,多线程的应用越来越广泛,如何在多线程环境中处理好同步和互斥问题,是操作系统课程设计中的一个重点。学生需要创建包含多个线程的进程,进行不同的任务,主线程则负责协调。这不仅锻炼了学生对多...
- **生产者-消费者问题**:这是多线程编程中的经典问题,生产者负责生成数据,消费者负责消费数据。设计时需考虑如何避免数据不一致(同步)和资源争抢(互斥)。流程图能直观展示生产者和消费者的交互,源代码或伪...
这种性能的背后,是它在内存管理上的优化,通过减少或避免内存垃圾的产生,有效地解决消费者处理消息效率低于生产者时可能导致的溢出问题。同时,Reactor还通过非阻塞流的方式,提供尽可能的异步操作,以减少线程的...
Kafka面试专题.docx可能涵盖Kafka的基本概念、架构、生产者消费者模型、消息持久化、高可用性及性能调优等内容。 4. **Spring Cloud与Docker实战微服务**:使用SpringCloud和Docker实战微服务.pdf可能探讨如何利用...