生产者-消费者模型
来源:互联网 发布:隔音棉 知乎 编辑:程序博客网 时间:2024/06/16 06:41
模拟一个生产者-消费者关系的程序。
其中包含5个类
1.主控类ProducerConsmer
2.共享数据类MyData
3.共享数据控制类ShareData
4.生产者线程类Producer
5.消费者线程类Consmer
class ProducerConsmer{ // 1---------------主控类 public static void main(String[] agrs){ ShareData sd=new ShareData(); Producer pro=new Producer(sd); Consmer con=new Consmer(sd); Thread t1=new Thread(pro); Thread t2=new Thread(con); t1.start(); t2.start(); }} class MyData{ // 2---------------共享数据类 public int id; } class ShareData{ // 3-------------共享数据控制类 private MyData data; //共享数据 private boolean notice=true; //通知变量 true--标记消费,false--标记生产 public synchronized void set(MyData data){ //生产工作 while(!notice){ //未消费,则等待 try{ this.wait(); }catch(InterruptedException e){ } } this.data=data; notice=false; //标记生产者已经生产 this.notify(); //通知消费者消费 } public synchronized MyData get(){ //消费工作 while(notice){ //未生产,则等待 try{ this.wait(); }catch(InterruptedException e){ } } notice=true; //标记消费者已经消费 this.notify(); //通知生产者生产 return this.data; } } class Producer implements Runnable{ // 4--------------生产者线程类 private ShareData sd; Producer(ShareData sd){ this.sd=sd; } public void run(){ for(int i=0;i<=10;i++){ MyData mydata=new MyData(); mydata.id=i; sd.set(mydata); System.out.println("生产者生产一条数据: "+mydata.id); try{ Thread.sleep((int)Math.random()*100); }catch(InterruptedException e){ } } } } class Consmer implements Runnable{ // 5--------------消费者线程类 private ShareData sd; Consmer(ShareData sd){ this.sd=sd; } public void run(){ for(int i=0;i<=10;i++){ MyData mydata=sd.get(); System.out.println("消费者消费一条数据: "+mydata.id); } try{ Thread.sleep((int)Math.random()*100); }catch(InterruptedException e){ } } }
运行结果:
消费者消费一条数据: 0
生产者生产一条数据: 0
生产者生产一条数据: 1
消费者消费一条数据: 1
生产者生产一条数据: 2
消费者消费一条数据: 2
……
……
消费者消费一条数据: 9
生产者生产一条数据: 9
消费者消费一条数据: 10
生产者生产一条数据: 10
阅读全文
0 0
- 生产者-消费者模型
- 生产者/消费者模型
- 生产者 消费者模型
- 生产者消费者模型
- 生产者&&消费者模型
- 模拟生产者/消费者模型
- 生产者消费者模型
- 生产者消费者模型
- 生产者与消费者模型
- 生产者/消费者模型
- 生产者与消费者模型
- 生产者/消费者模型
- 生产者消费者模型
- 生产者消费者模型
- 生产者消费者模型
- 生产者消费者模型 ArrayBlockingQueue
- 生产者消费者模型
- 生产者消费者模型 - Storage
- Unicode 和 UTF-8 有何区别?
- 自定义控件画笔画圆
- 如何用construct2制作一个游戏?
- Timer控件相关操作
- HDOJ 2091 空心三角形
- 生产者-消费者模型
- 写给那个茶水妹的《乘风破浪》诞生记
- Linux C编程第二章的10个问题以及解决方案
- java进阶,Spring,SpringMVC等总结
- 主成分分析(PCA)算法原理介绍
- c++中iterator迭代器和vector容器
- uva 12012
- MVP模式从入门到精通
- 枚举Enum