package com.wuming.thread;//测试:生产者消费者模型,利用缓冲区解决:管程法
//生产者,消费者,产品,缓冲区
public class TestPC {public static void main(String[] args) {SynContainer container = new SynContainer();new Productor(container).start();new Consumer(container).start();}}
//生产者
class Productor extends Thread{SynContainer container;public Productor(SynContainer container) {this.container = container;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("生产了"+ i +"只鸡");container.push(new Chicken(i));}}
}
//消费者
class Consumer extends Thread{SynContainer container;public Consumer(SynContainer container) {this.container = container;}@Overridepublic void run() {for (int i = 0; i < 100; i++) {System.out.println("消费了-->"+container.pop().id+"只鸡");}}
}
//产品
class Chicken{int id;//产品编号public Chicken(int id) {this.id = id;}
}
//缓冲区
class SynContainer{//需要一个容器大小Chicken[] chickens=new Chicken[10];//计数器int count=0;//生产者放入产品public synchronized void push(Chicken chicken){//如果容器满了,就需要等待消费者消费if (count==chickens.length){//通知消费者消费,生产等待try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//如果没有满,我们就需要丢入产品chickens[count]=chicken;count++;//可以通知消费者消费了this.notify();}//消费者消费产品public synchronized Chicken pop(){//判断能否消费if (count==0){//等待生产者生产,消费者等待try {this.wait();} catch (InterruptedException e) {e.printStackTrace();}}//如果可以消费count--;Chicken chicken=chickens[count];//吃完啦,通知生产者生产this.notify();return chicken;}
}

生产了0只鸡
生产了1只鸡
生产了2只鸡
生产了3只鸡
生产了4只鸡
生产了5只鸡
生产了6只鸡
生产了7只鸡
生产了8只鸡
生产了9只鸡
生产了10只鸡
生产了11只鸡
消费了-->9只鸡
消费了-->10只鸡
消费了-->8只鸡
消费了-->7只鸡
消费了-->6只鸡
消费了-->5只鸡
消费了-->4只鸡
消费了-->3只鸡
消费了-->2只鸡
消费了-->1只鸡
消费了-->0只鸡

。。。。。。。

多线程:管cheng法相关推荐

  1. java线程钥匙_Java多线程并发编程/锁的理解

    一.前言 最近项目遇到多线程并发的情景(并发抢单&恢复库存并行),代码在正常情况下运行没有什么问题,在高并发压测下会出现:库存超发/总库存与sku库存对不上等各种问题. 在运用了 限流/加锁等 ...

  2. python 中主线程结束 子线程还在运行么_「干货」python线程笔记

    引言&动机 考虑一下这个场景,我们有10000条数据需要处理,处理每条数据需要花费1秒,但读取数据只需要0.1秒,每条数据互不干扰.该如何执行才能花费时间最短呢? 在多线程(MT)编程出现之前 ...

  3. (转)编辑器_编辑器杂谈(转载)+点评

    简介摘要: 编辑器杂谈(转载)+点评 编辑器杂谈(转载)+点评点评:Scintilla: 目前Scintilla有一统江湖的趋势.只要是新开发的软件工具能够用到高级编辑器的地方基本上就会用它了.的确S ...

  4. JavaSE基础学习(四)—Java核心类库(下)

    目录 思维导图快速预览全文内容 一.异常机制(重点) 1.基本概念 2.异常分类 3.异常的避免 4.异常的捕获 5.异常的抛出 6.自定义异常 二.File类(重点) 1. 基本概念 2.常用方法 ...

  5. 编辑器杂谈(转载)+点评

    http://blog.csdn.net/gxj1680/article/details/7091367 点评: Scintilla: 目前Scintilla有一统江湖的趋势.只要是新开发的软件[ru ...

  6. 一个LED的N种玩法--多线程

    一个LED的N种玩法--多线程 Author: chenzhufly Email: chenzhufly@126.com 2010-05-04 这篇我将来玩玩多线程操作,体会一下其中的乐趣.实际上这也 ...

  7. python实用程序育儿法_Python多线程 简明例子

    Python多线程 简明例子 (2010-03-11 15:15:09) Python多线程 简明例子 综述 多线程是程序设计中的一个重要方面,尤其是在服务器Deamon程序方面.无论何种系统,线程调 ...

  8. Linux多线程贝叶斯建树教程,构建系统发育树:贝叶斯法建树

    写在前面:我对建树也是一知半解,这里只是想记录一下自己跟别人学习的建树方法,可能不具有普适性.但毕竟写在公众平台,大家自主参考. 用phylosuite进行.nex文件的准备,用在线建树网站CIPRE ...

  9. 多线程之基于积分法与欧拉恒等式法的圆周率计算及OMP优化

    文章目录 一.问题描述 二.积分法 算法推导 编程实现 OMP优化 三.欧拉恒等式 算法推导 编程实现 前期准备 加法 减法 乘法 除法 算法实现 OMP优化 四.总结 积分法与欧拉恒等式法的对比 O ...

最新文章

  1. 北大高材生割美国韭菜被FBI通缉?本人回应予以否认
  2. maven 打jar包将配置文件,和lib包打在外面
  3. Ubuntu 12.04下spark1.0.0 集群搭建(原创)
  4. python中的log模块笔记
  5. MySQL Performance-Schema(一) 配置篇
  6. jquery自己主动旋转的登录界面的背景代码登录页背景图
  7. Centos7jdk安装
  8. 第3章 用户(账户)管理
  9. mysql面向对象例子_PHP 面向对象实例:获取数据库用户数据
  10. (转)Vue 爬坑之路(四)—— 与 Vuex 的第一次接触
  11. 使用PyQt打包命令pyinstall的几个问题
  12. KVM图形管理界面打不开(virt-manager 报错)
  13. 离线地图瓦片下载工具
  14. 数学建模练习-----基于无线通信基站的室内定位问题
  15. android连接打印机打印pdf文件,在android中打印pdf
  16. 微信小程序如何和服务器交互,微信小程序数据库交互应该如何实现?
  17. Windows自动更新呈灰色点不了,电脑会自动更新的解决方案
  18. android 日历动画的实现
  19. C语言(谭浩强版本,主讲人:小甲鱼)P1-P9
  20. linux 流量 脚本,实时查看linux网卡流量脚本

热门文章

  1. 如何跨项目工作空间访问MaxCompute资源和函数?
  2. 基于泛型编程的序列化实现方法
  3. 走进新华三解决方案 360°业务能力中心,读懂新华三如何助力企业数字化转型
  4. 云转型谈何容易?打破转型阵痛,汇量科技加码云原生
  5. 【我想进大厂】Redis夺命连环11问
  6. 大数据成长之路:谈谈那些必须学习的Linux基础知识
  7. 为什么你的年薪只是别人的月薪?你需要技术专家帮你「充电」
  8. Cloud一分钟 | 云厂商Zoho域名被禁两小时;京东云公布医疗健康战略
  9. 约稿——码字能赢得百万人生?不开玩笑
  10. Navicat连接mysql8.0.1版本出现1251--Client