蜜蜂产蜜问题

场景:

有若干只蜜蜂和若干只熊 一个蜜罐 每个蜜蜂有个袋子.

蜜蜂产蜜每次产一点用时10ms 熊每次吃光蜜罐中的蜂蜜

蜜罐的最大容量为30 袋子的最大容量为20

蜜蜂将每次的产的蜂蜜放在袋子里 当袋子中的蜂蜜大于5时就可以向 蜜罐添加蜂蜜

/**

* 蜜蜂 自带一个容量为5的囊 每次产1 耗时10ms,满足5的时候给蜜罐添加

*/

public class Bee extends Thread{

private int bag = 0;

private static final int BAG_MAX = 20;

private static final int ONCE = 5; //每生产5斤可以放入蜜罐

private static final int TIME = 10;//生产一斤花费10ms

private Box box;

private String name;

public Bee(String name, Box box){

this.name = name;

this.box = box;

}

public void run() {

while(true){

//如果不足5

if(bag >=0 && bag < 5){

bag++;

try {

Thread.sleep(10);

} catch (Exception e) {}

}

//满足放蜂蜜的条件

if(bag >= 5){

synchronized (box) {

//取出当前的蜜罐容量

int cap = box.capacity;

//蜜罐已满

if(cap >= Box.MAX){

box.notifyAll(); //通知熊吃蜜

}else{

//蜜罐剩余的空间

int remain = Box.MAX - cap;

//如果包中的量比罐中的多,就填满罐子

if(bag >= remain){

box.capacity = Box.MAX;

bag = bag - remain;

System.out.println(name+"添加了 = " +remain +" 蜜罐当前量:"+box.capacity);

box.notifyAll();

}

//不足remain

else{

box.capacity = box.capacity + bag;

System.out.println(name+"添加了 = " +bag +" 蜜罐当前量:"+box.capacity);

bag = 0;

}

}

}

}

//向小包增加蜂蜜,这部分代码不需要同步是并发完成的.

if(bag >= Bee.BAG_MAX){

synchronized (box) {

try {

box.wait();

} catch (Exception e) {}

}

}else{

bag ++;

System.out.println(name+"bag = "+bag);

try {

Thread.sleep(10);

} catch (Exception e) {

// TODO: handle exception

}

}

}

}

}

/**

* 熊

*/

public class Bear extends Thread{

private Box box;

private String name;

public Bear(Box box,String name){

this.box = box;

this.name = name;

}

public void run() {

while(true){

synchronized (box) {

if(box.capacity == box.MAX){

int tmp = box.capacity;

box.capacity = 0;

System.out.println(name + ":" + "吃掉了" +tmp);

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

box.notifyAll();

}else{

try {

box.wait();

} catch (InterruptedException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

}

}

}

/**

*蜜罐

*/

public class Box {

public  static final int MAX = 30;

public int capacity = 0;

}

/**

* 蜜蜂的生产消费问题

*/

public class ThreadDemo3 {

public static void main(String[] args) {

Box box = new Box();

Bee bee1 = new Bee("b-1",box);

Bee bee2 = new Bee("b-2",box);

Bee bee3 = new Bee("b-3",box);

Bee bee4 = new Bee("b-4",box);

Bee bee5 = new Bee("b-5",box);

Bee bee6 = new Bee("b-6",box);

Bee bee7 = new Bee("b-6",box);

Bee bee8 = new Bee("b-6",box);

Bee bee9 = new Bee("b-6",box);

Bee bee10 = new Bee("b-6",box);

Bear bear1 = new Bear(box,"熊大");

//Bear bear2 = new Bear(box,"熊二");

bee1.start();

bee2.start();

bee3.start();

bee4.start();

bee5.start();

bee6.start();

bee7.start();

bee8.start();

bee9.start();

bee10.start();

bear1.start();

//bear2.start();

}

时间: 2025-01-02 18:31:21

蜜蜂产蜜问题的相关文章

童年野趣:动物篇 (文字版)

动物:猪 游戏:骑猪.某年,邻居大哥哥看到街上有一头猪正在睡觉,于是撺掇着让我去骑一下试试.我立即去叔叔家拿了一个小板凳,站在上边,跳上猪背.大哥哥可能没想到我真的敢上,他赶紧过来帮忙.猪惊起,狂奔.我也吓的说不出话来,紧紧抓住猪的耳朵.大哥哥一手扶着我,一手拽着猪,跟着奔跑.杀猪一般惨叫后邻居是个屠夫.所以清早经常被杀猪的嚎叫吵醒,比闹钟都准.“杀猪一般惨叫”这个形容语我是感受非常深刻的.吹猪皮:猪被屠宰之后,先要放血.然后在猪蹄那儿割上一刀,找个“大气”的人朝里面吹气,吹完之后扎起来.然后用

蜜蜂会发现蜜没了吗?

名叫Halictus ligatus 的隧蜂,雌性,身上沾着的花粉很有可能来自葵花,标本2012年采集于费城. "勤劳"是很多人说起蜜蜂的第一个反应.确实,多亏蜜蜂传播授粉,许多开花植物才得以延续后代."如果没有了蜂,人类或将无法生存,"美国昆虫学家山姆?德勒格(Sam Droege)告诉果壳网:"许多植物和作物品种都将消失,到时候人类能吃的大部分都是水稻和其他谷物,因为这些作物不靠蜂媒而靠风媒授粉." 德勒格是美国地质调查局(USGS)帕塔克森

大数据Java基础第九天作业

第一题: /**  * 1.盒子最大容量120g,(当前蜂蜜量 >= 最大容量时,则蜜蜂不往里倒蜂蜜,发送通知,在消息队列等待)  * 2.小熊每一次吃50g,(当盒子蜂蜜量 < 50则不吃,发送通知,在消息队列等待)  * 3.蜜蜂自己的口袋最大量80g,蜜蜂每1s生产6g蜂蜜,当口袋容量 >= 50g时则把所有容量倒入小熊的盒子.  */ //蜜蜂类 class Bee extends Thread{     public static final int BAG_MAX = 80;

项目策划的方法

一.头脑风暴法 头脑风暴法又称集体思考法或智力激励法,于1939年由奥斯本首先提出的,并在1953年将此方法丰富和理论化. 所谓的头脑风暴法是指采用会议的形式,如集专家开座谈会征询他们的意见,把专家对过去历史资料的解释以及对未来的分析,有条理地组织起来,最终由策划者做出统一的结论,在这个基础上,找出各种问题的症结所在,提出针对具体项目的策划创意. 这种策划方法在进行会议时,策划人要充分地说明策划的主题,提供必要的相关信息,创造一个自由的空间,让各位亏家充分表达自己的想法.为此,参加会议的专家的地

智能算法|有哪些以动物命名的算法?

黄梅时节家家雨,青草池塘处处蛙. 有约不来过夜半,闲敲棋子落灯花. 鱼群算法?鸟群算法?蝙蝠算法?蚁群算法?病毒算法?...what?这些是什么沙雕算法? 别看这些算法名字挺接地气的,实际上确实很接地气... 以动物命名的算法可远不止这些,俗话说得好,只要脑洞大,就能玩出新花样,这句话在启发式算法界绝对名副其实!然鹅什么是启发式算法呢? 启发式算法:一个基于直观或经验构造的算法,在可接受的花费(指计算时间和空间)下给出待解决组合优化问题每一个实例的一个可行解,该可行解与最优解的偏离程度一般不能被

java基础第八天_多线程

1. 5辆汽车过山洞,依次经过山洞.每辆车通过山洞花费10秒,使用多线程实现. 2. 用多线程模拟蜜蜂和熊的关系. 蜜蜂是生产者,熊是消费者.蜜蜂生产蜂蜜是累加的过程,熊吃蜂蜜是批量(满100吃掉)的过程. 生产者和消费者之间使用通知方式告知对方.注意不能出现死锁的现象. 1. 5辆汽车过山洞,依次经过山洞.每辆车通过山洞花费10秒,使用多线程实现. class Car extends Thread{ private String name; private static Object lock

2016021701 - 百位名人读书心法01

梁师主张趣味,如果将梁启超进行化学分析,那么只剩下趣味.如果一个人一生中的学习都是因为趣味,那么人生将会多么幸福啊!此非我等凡夫俗子可以企及!如果没有这等高级趣味,那么我等只可因为目标或者某种目的读书,亦是芸芸众生读书的目的. 读书如同恋爱一般,那么喜欢读书如同喜欢恋爱一般,应该爱上读书.人不读书,则尘俗生其间,照镜则面目可憎,对人则语言无味. 梭罗说文盲有两种,一种人是不识字,另外一种人则是只读小学初中生读的书,不读经典流传已久的书籍.所以别说自己不是文盲,或许你也是第二类文盲了! 很多大家都

(纪录片)现代生活的秘密规则:算法 The Secret Rules of Modern Living: Algorithms

简介: The Secret Rules of Modern Living: Algorithms (2015) 导演: David Briggs主演: Marcus du Sautoy类型: 纪录片官方网站: http://www.bbc.co.uk/programmes/p030s6b3制片国家/地区: 英国语言: 英语上映日期: 24 Sep 2015片长: 1 hour 主要内容: 介绍算法在现代生活中的应用(极力推荐这部纪录片),有趣.直观.富有实际意义,主要包含以下几种算法: 1.人

【DAY9】 关于多线程熊吃蜜Demo1的作业实验

1.蜜蜂和熊的生产消费关系,熊在蜂蜜满10斤吃掉.蜜蜂一次生产一斤蜂蜜,且蜜蜂生成一斤蜂蜜花费的时间是10s. 十只蜜蜂和两只熊. package com.yehomlab; import java.util.ArrayList; import java.util.List; class Bear implements  Runnable {     List<Integer> list;     public Bear(List<Integer> list){      this