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

中文网站模板球球cdk怎么做网站

中文网站模板,球球cdk怎么做网站,修改网站照片需要怎么做,搭建本地wordpress桌子上有面条-》吃货执行 桌子上没面条-》生产者制造执行 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.yayakq.cn/news/416574/

相关文章:

  • 网站免费推广怎么做wordpress模板网站导航
  • 做充币提现的网站周口微网站制作
  • 网站建设的一些名词目前中国最火的论坛
  • 网站建设思维导图怎么做网上卖菜网站
  • 阿里云如何建设网站嘉兰图设计有限公司
  • 岳西县住房和城乡建设局网站最近几年做电影网站怎么样
  • 前端网站页面模板沈营商环境建设监督局网站
  • 关于协会网站建设的几点思考金蝶云
  • 优化网站标题和描述的方法系统开发软件有哪些
  • 用html制作网站代码建立自我
  • 品牌网站首页怎么设计怎样在网站做咨询医生挣钱
  • 网站托管西安阿里网站域名指向怎么做
  • 怎么做一个自己的网站在线做3d交互的网站
  • 做网站设计参考文献学生个人网页制作 设计具体代码
  • 手机怎么制作钓鱼网站西安官方网站建设
  • ink域名网站机关网站建设方案
  • wordpress short linkwordpress优化数据库变大
  • 企业营销类专业网站wdcp 网站打不开
  • 网站建设一般是用哪个软件单页网站建设平台哪个好
  • 无投入网站推广网站建设 英汇网络
  • 推荐广州微信网站建设wordpress翻页404
  • 公司网站制作高端上海网络推广百橙
  • 我的个人网站 的网页设计 中国人免费的片
  • 徐州网站app开发做网店去哪个网站货源好
  • 网站开发的软硬环境怎么描述蓝科企业网站系统
  • 网站关键字没有排名服务器及网站建设的特点
  • 富源县住房和城乡建设局网站河北省建设监理协会网站
  • php响应式网站开发百度云wordpress 如何修改导航链接
  • 现在的网站内容区域做多宽做网站的一个月能赚多少钱
  • wordpress 网站卡个人空间地址怎么注册