JAVA线程(生产者与消费者)
来源:互联网 发布:朱炫热血知乎 编辑:程序博客网 时间:2024/05/21 16:55
业务需求:
生产20个馒头,篮子里只能放6个馒头。
消费者发现篮子里有馒头可以食用时即可把馒头取出开始使用,直到篮子里馒头为空。
生产者发现篮子里的馒头不满足6个时,生产者开始生产馒头并放入篮子中。
具体实现:
第一步:创建盛放馒头的篮子类
第二步:创建生产者类
第三步:创建消费者类
第四步:创建馒头对象类
第五步:创建测试类
到此生产者消费者的小例子结束,希望能起到抛砖引玉的作用。
生产20个馒头,篮子里只能放6个馒头。
消费者发现篮子里有馒头可以食用时即可把馒头取出开始使用,直到篮子里馒头为空。
生产者发现篮子里的馒头不满足6个时,生产者开始生产馒头并放入篮子中。
具体实现:
第一步:创建盛放馒头的篮子类
- public class SyncBasket {
- public Bread[] breads = new Bread[6];
- private int index = 0;
- public synchronized void push(Bread bread ) {
- while(index==this.breads.length){
- try{
- this.wait();
- }catch(InterruptedException e){
- e.printStackTrace();
- }
- }
- this.notifyAll();
- breads[index]=bread;
- index++;
- }
- public synchronized Bread pop() {
- while(index==0){
- try{
- this.wait();
- }catch(InterruptedException e){
- e.printStackTrace();
- }
- }
- this.notifyAll();
- index--;
- return breads[index];
- }
- }
第二步:创建生产者类
- public class Producer implements Runnable {
- private SyncBasket basket;
- public Producer(SyncBasket basket) {
- this.basket = basket;
- }
- public void run() {
- for(int i=1;i<21;i++){
- Bread bread = new Bread(i);
- basket.push(bread);
- System.out.println("producer produce: " + bread);
- try {
- Thread.sleep((int) (Math.random() * 1000));
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
第三步:创建消费者类
- public class Consumer implements Runnable {
- private SyncBasket basket;
- public Consumer(SyncBasket basket) {
- this.basket = basket;
- }
- public void run() {
- for(int i=0; i<20; i++) {
- Bread bread = basket.pop();
- System.out.println("Consumer eat: "+bread);
- try {
- Thread.sleep((int) (Math.random() * 1000));
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- }
- }
第四步:创建馒头对象类
- public class Bread {
- private int id;
- public Bread(int id){
- this.id=id;
- }
- @Override
- public String toString() {
- return String.valueOf(id);
- }
- }
第五步:创建测试类
- public class TestProConsumer {
- public static void main(String[] args) {
- SyncBasket basket=new SyncBasket();
- Producer producer=new Producer(basket);
- Consumer consumer=new Consumer(basket);
- new Thread(producer).start();
- new Thread(consumer).start();
- }
- }
到此生产者消费者的小例子结束,希望能起到抛砖引玉的作用。
- JAVA线程(生产者与消费者)
- java线程 生产者与消费者
- java线程 生产者与消费者
- 线程(消费者与生产者)
- java线程(生产者/消费者)
- Java回炉之多线程(二)生产者与消费者
- java线程(2)——模拟生产者与消费者
- java模拟生产者与消费者问题(线程同步)
- java线程模拟生产者与消费者
- 生产者与消费者 java经典线程法
- JAVA 线程间通信 - 生产者与消费者
- java线程经典之生产者与消费者
- java之多线程实例 生产者与消费者
- JAVA 线程间通信 - 生产者与消费者
- java线程通信 生产者与消费者模式
- java线程生产者与消费者模型
- java线程之生产者与消费者模式
- 线程生产者与消费者
- ASP.NET将EXCEL导入SQL+SERVER数据库的代码
- 重载new和delete
- Open Inventor练习-SoWinExaminerViewer的继承演示
- 关键字ref和out
- 如何清除xp和win7上的无线配置文件
- JAVA线程(生产者与消费者)
- 《竞雄女侠秋瑾》将映 黄奕打造另类秋瑾
- Kernel 中调用其它驱动程序的几种方法
- 再掀融资潮 团购网仍后劲不足(团购现状分析)
- 深入剖析MFC中Windows消息机制
- win8初体检
- C# 局部刷新
- 字符串处理的一些题
- 黑马程序员--银行调度系统