当前位置: 首页 > news >正文

找网络公司做网站广东河源最新疫情

找网络公司做网站,广东河源最新疫情,北京做公司网站,黄色网站模板桌子上有面条-》吃货执行 桌子上没面条-》生产者制造执行 1、消费者等待 消费者先抢到CPU执行权,发现桌子上没有面条,于是变成等待wait状态,并释放CPU执行权,此时的CPU肯定会被厨师抢到,初始开始做面条,…

在这里插入图片描述
桌子上有面条-》吃货执行
桌子上没面条-》生产者制造执行
在这里插入图片描述

1、消费者等待

消费者先抢到CPU执行权,发现桌子上没有面条,于是变成等待wait状态,并释放CPU执行权,此时的CPU肯定会被厨师抢到,初始开始做面条,当厨师做完后会对吃货进行提示,notify唤醒吃货来吃。
在这里插入图片描述
在这里插入图片描述

2、生产者等待

厨师先抢到CUP执行权,但是桌子上有面条,就不能再制作面条,只能等待消费者吃完面条才能做,消费者吃完后需要唤醒厨师继续做
在这里插入图片描述
代码逻辑:
在这里插入图片描述
厨师:

public class Cook extends Thread{@Overridepublic void run() {//1循环//2同步代码块//3共享数据是否到末尾,Yes//4共享数据是否到末尾,Nowhile (true){synchronized (Desk.lock){if (Desk.count==0){break;//10碗吃完}else {//厨师的核心逻辑//01判断桌子上是否有食物if (Desk.foodflag==1){//02有食物就等待try {Desk.lock.wait();} catch (InterruptedException e) {throw new RuntimeException(e);}}else {//03没有System.out.println(Thread.currentThread().getName()+"制作食物");//04改变桌子状态Desk.foodflag=1;//05唤醒消费者吃Desk.lock.notifyAll();}}}}}
}

吃货:

public class Customer extends Thread{@Overridepublic void run() {while (true){synchronized (Desk.lock){if (Desk.count==0){break;//10碗吃完}else {//吃货的核心逻辑/** 1.判断桌子上有无面条* 2.没有:自己等待,* 3.有:吃完,并唤醒厨师做面条,count--* 4.修改桌子状态*/if (Desk.foodflag==0){//1.判断桌子上有无面条try {Desk.lock.wait();//2.没有:自己等待,} catch (InterruptedException e) {throw new RuntimeException(e);}}else {//3.有:吃完,并唤醒厨师做面条,count--Desk.count--;System.out.println(Thread.currentThread().getName()+"还能再吃"+Desk.count+"碗");Desk.lock.notifyAll();//4.修改桌子状态Desk.foodflag=0;}}}}}
}

桌子:

public class Desk {//通过变量来控制 0:没食物  1:有食物public static int foodflag=0;//总个数,最多做十碗public static int count=10;//锁对象public static Object lock=new Object();
}

//测试类

public class Test {public static void main(String[] args) {Customer customer = new Customer();Cook cook = new Cook();customer.setName("吃货");cook.setName("厨师");customer.start();cook.start();}
}

3、阻塞队列实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

接口无法new对象,只能通过两个实现类,第一个可以自定义队列长度。
注意:生产者与消费者必须针对同一个阻塞队列,阻塞队列可以创建在测试类中
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
厨师:

public class Cook extends Thread{ArrayBlockingQueue<String> queue;//创建构造函数,创建对象的时候进行赋值,指定同一个阻塞队列public Cook(ArrayBlockingQueue<String> queue) {this.queue = queue;}@Overridepublic void run() {while (true){try {queue.put("面条");System.out.println("厨师做了一碗面条");} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

消费者:

public class Customer extends Thread{ArrayBlockingQueue<String> queue;public Customer(ArrayBlockingQueue<String> queue) {this.queue = queue;}@Overridepublic void run() {while (true){try {String food=queue.take();//tack底层也进行了加锁,不需要我们自己定义System.out.println("获取食物"+food);} catch (InterruptedException e) {throw new RuntimeException(e);}}}
}

测试类:

public class Test {public static void main(String[] args) {ArrayBlockingQueue<String> queue=new ArrayBlockingQueue<>(1);Customer customer = new Customer(queue);Cook cook = new Cook(queue);customer.setName("吃货");cook.setName("厨师");customer.start();cook.start();}
}
http://www.15wanjia.com/news/1017.html

相关文章:

  • 苏州专业高端网站建设品牌广告图片
  • 凡客建站手机版下载seo牛人
  • 广州好的做网站公司线上引流线下推广方案
  • 无锡网络公司服务太原建站seo
  • 工信部网站备案名单推广运营怎么做
  • qq空间登录搜索引擎优化学习
  • 网站开发代码编辑器网络营销ppt案例
  • 做网站用什么软件做百度网页版链接地址
  • 大连网站制作431网络营销软件排行
  • 钦州网站建设做网站排名服务热线
  • wordpress开发的网站有哪些seo优化是指
  • 相亲交友网站建设公司营销策划方案案例
  • 新疆生产建设兵团职业资格证书查询官方网站如何做网络推广人员
  • 淘宝详情页做的比较好的网站技术培训学校机构
  • dw做网站怎么让文字移动怎么下载需要会员的网站视频
  • 个人网站建设流程网站建设费用多少钱
  • 网站被301百度直接打开
  • 电子商务网站建设asp sql 源码下载谷歌seo排名优化
  • 设计培训培训网站建设google官网登录
  • 佛山企业网站建设流程苏州优化排名seo
  • 网站建设开360网站收录提交
  • 怎么快速刷排名株洲专业seo优化
  • 网站群系统推广文案怎么写
  • 企业做网站这些问题必须要注意seo排名app
  • 网站的形式seo厂家电话
  • 厦门百城建设有限公司网站百度seo课程
  • wordpress站点后台石家庄新闻网头条新闻
  • 多媒体网站开发实验报告在线生成个人网站免费
  • 医院网站建设中标seo常用分析的专业工具
  • 1688会提供网站建设官网整站优化