生产者消费者问题
来源:互联网 发布:阿里巴巴比淘宝好做吗 编辑:程序博客网 时间:2024/05/22 23:21
最近复习了下操作系统中相关内容,看到多线程同步问题,这个问题的典型案例的就是生产者,消费者问题,我昨晚利用了点时间写了个生产者消费者的小程序,权当自己复习一下基础知识。
程序主要有两个线程,一个生产者线程,一个消费者线程,生产者负责生产产品(,每隔1s生产一个产品,最多生产20个),当当前未被消费者消费的产品满20个后,生产者就不会生产产品,直到有产品产品少于20个,消费者每隔3s消费一次产品,每次消费生产者刚刚生产出的产品,如果没有产品,消费者就放弃此次消费,直到有新产品可以消费。
package com.jackchan;public class ConsumerProducer {class Thing{int i = 0;//指向当前的空位置(共20个位置)public synchronized void producing(){if(i == 20){//货物已经生产满了,无空位置return;}else{System.out.println("Producer " + i);//生产产品到第i位置i++;//指向下一个空位置}}public synchronized void consuming(){if(i == 0){//货物已经取完了return;}else{i--;//当前空位置的前一个货物被取走System.out.println("Consumer " + i);//取走货物的位置}}}public static void main(String[] args){final Thing thing = new ConsumerProducer().new Thing();Runnable producer = new Runnable() {@Overridepublic void run() {while(true){try {thing.producing();Thread.sleep(1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}};Runnable consumer = new Runnable() {@Overridepublic void run() {while(true){try{thing.consuming();Thread.sleep(3000);}catch(InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}};Thread ProducerThread = new Thread(producer);ProducerThread.start();Thread ConsumerThread = new Thread(consumer);ConsumerThread.start();}}
运行结果如图所示
- 生产者-消费者问题
- 生产者-消费者问题
- 生产者-消费者问题
- 操作系统:生产者-消费者问题
- 生产者与消费者问题
- 生产者-消费者问题
- 关于生产者-消费者问题
- java生产者 消费者问题
- 消费者和生产者问题
- 生产者消费者问题
- 生产者消费者问题--多线程
- 生产者-消费者同步问题
- 生产者消费者问题
- 生产者与消费者问题
- 生产者 消费者问题!
- 生产者与消费者问题
- 生产者消费者问题
- 关于生产者-消费者问题
- 如何使得控件不需要在操作UI时检查InvokeRequired
- hadoop 文档Hadoop The Definitive Guide 2nd Edition
- Android 数据缓存----------保存至Cache目录下/读取已有Cache
- 解决 Microsoft Office Word 遇到问题需要关闭。我们对此引起的不便表示抱歉
- 需求变更管理与敏捷开发
- 生产者消费者问题
- JInternalFrame的使用
- 注册表修改大全(浏览文章时可以使用CTRL+F查找)
- SystemService学习之TELEPHONY_SERVICE
- 混在中国,财富保值的必要性,读《金砖四国之梦:通向2050之路》有感
- C++静态成员函数小结
- CHM格式文件受损
- ActiveX
- CSDN 插入代码测试,为什么没有显示呢