生产者模式
2015-11-14 21:48
239 查看
public class Main { public static void main(String[] args){ Stack stack=new Stack("栈程1"); Producer pro=new Producer(stack,"生产者"); Consumer con=new Consumer(stack,"消费者"); } } //生产者 class Producer extends Thread{ private Stack stack; public Producer(Stack stack,String name) { super(name); this.stack = stack; start(); } @Override public void run() { for(int i=0;i<100;i++){ String good= "good" + (this.stack.getIndex() + 1); this.stack.push(good); System.out.println(getName() + ": 压入 " + good + " " + " 成功"); Thread.yield(); } } } //消费者 class Consumer extends Thread { private Stack stack; public Consumer(Stack stack,String name) { super(name); this.stack = stack; start(); } @Override public void run() { for(int i=0;i<100;i++){ //good="获得"+this.stack.pop(i); String good=this.stack.pop(); //System.out.println(good); System.out.println(getName() + ": 取出 " + good + " " + " 成功"); Thread.yield(); } } } class Stack { private String name; private boolean flag=false; //红绿灯 private String[] buffers=new String[100]; //争夺的资源 private int index=-1; public String getName() { return name; } public void setName(String name) { this.name = name; } public boolean isFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } public String[] getBuffers() { return buffers; } public Stack(String name) { super(); this.name = name; } public Stack() { super(); } public void setBuffers(String[] buffers) { this.buffers = buffers; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } //============================================ //弹栈 public synchronized String pop() { try { if(!flag){ this.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } String str=buffers[index]; buffers[index]=null; Thread.yield(); index--; flag=false; this.notifyAll(); return str; } //压栈 public synchronized void push(String good) { try { if(flag){ this.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } index++; Thread.yield(); buffers[index]=good; flag=true; this.notifyAll(); } }
相关文章推荐
- #define的一些
- Android性能调优
- Gym 100796K Profact(爆搜+剪枝)
- C++实现单链表
- SYN及SYN攻击
- 最新破解Wordpress后台密码的方法
- 计算机的大端模式和小端模式
- 单例模式-Singleton
- BestCoder Round #62 (div.2)-Clarke and food(模拟)
- iOS基于百度地图的开发(3)——地址搜索
- IOS开源库一览表
- 常见的设计模式(八)——桥接模式
- 适配器模式-Adapter
- centos 的yum仓库搭建
- [OpenCV] -- win7下配置OpenCV的Qt开发环境
- POJ 2352 【树状数组】
- STL: lower_bound, upper_bound用法(C++)
- 九度OJ 1335:闯迷宫 (BFS)
- Android Studio简单设置
- mybatis使用@param后掉的坑