
java线程(18)——管程法,炸鸡生产者与消费者的案例
发布日期:2021-05-07 02:53:15
浏览次数:17
分类:精选文章
本文共 1851 字,大约阅读时间需要 6 分钟。
生产者与消费者的代码实现案例:管程法缓冲区解决方案
//案例:生产者消费者模型-->利用缓冲区解决:管程法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; } @Override public void run() { for (int i = 1; i < 101; i++) { System.out.println("生产了第" + i + "只鸡"); container.push(new Chicken(i)); } }}//消费者类class Consumer extends Thread { SynContainer container; public Consumer(SynContainer container) { this.container = container; } @Override public void run() { for (int i = 1; i < 101; 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 == 10) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } chickens[count] = chicken; count++; this.notifyAll(); } public synchronized Chicken pop() { if (count == 0) { try { this.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } count--; Chicken chicken = chickens[count]; this.notifyAll(); return chicken; }}this.wait和this.notifyAll需要在synchronized代码块中使用
this.wait与线程休眠的sleep方法类似,但是this.wait会释放锁,sleep不会notify随机选择一个在指定对象上等待的线程激活notifyAll激活指定对象上等待的所有线程
发表评论
最新留言
留言是一种美德,欢迎回访!
[***.207.175.100]2025年04月09日 19时55分02秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
牛客网输入输出举例
2019-03-06
字符串初始化时的注意点
2019-03-06
软考相关试题
2019-03-06
顺序表的操作
2019-03-06
常量表达式
2019-03-06
POD类型
2019-03-06
const与常量,傻傻分不清楚~
2019-03-06
Head First设计模式——迭代器模式
2019-03-06
MongoDB版本及存储引擎区别
2019-03-06
shell echo单行和多行文字定向写入到文件中
2019-03-06
AtCoder Beginner Contest 100 题解
2019-03-06
【数据结构】可持久化线段树初步
2019-03-06
Java高性能编程之CAS与ABA及解决方法
2019-03-06
从BIO到Netty的演变
2019-03-06
《算法导论》第二章笔记
2019-03-06
HTML节点操作
2019-03-06
HTML5新特性
2019-03-06
cmp命令
2019-03-06
一次编辑
2019-03-06
JavaScript中的链式调用
2019-03-06