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

上海市建设协会考试网站百度竞价是seo还是sem

上海市建设协会考试网站,百度竞价是seo还是sem,网页设计实验报告结果,百度怎么收录网站生产者和消费者 概述: 生产者消费者问题,实际上主要是包含了两类线程: 生产者线程用于生产数据消费者线程用于消费数据 生产者和消费者之间通常会采用一个共享的数据区域,这样就可以将生产者和消费者进行解耦, 两…

生产者和消费者

概述:

生产者消费者问题,实际上主要是包含了两类线程:

  • 生产者线程用于生产数据
  • 消费者线程用于消费数据

生产者和消费者之间通常会采用一个共享的数据区域,这样就可以将生产者和消费者进行解耦,

两者都不需要互相关注对方的

方法:

Object类的等待和唤醒方法

方法名说明
void wait()导致当前线程等待,直到另一个线程调用该对象的 notify()方法或 notifyAll()方法
void notify()唤醒正在等待对象监视器的单个线程
void notifyAll()唤醒正在等待对象监视器的所有线程

案例需求:

  • 桌子类(Desk):定义表示双吉芝士汉堡数量的变量,定义锁对象变量,定义标记桌子上有无双吉芝士汉堡的变量

  • 生产者类(Cooker):实现Runnable接口,重写run()方法,设置线程任务

    1.判断是否有双吉芝士汉堡,决定当前线程是否执行

    2.如果有双吉芝士汉堡,就进入等待状态,如果没有双吉芝士汉堡继续执行,生产双吉芝士汉堡

    3.生产双吉芝士汉堡之后,更新桌子上双吉芝士汉堡状态,唤醒消费者消费双吉芝士汉堡

  • 消费者类(Foodie):实现Runnable接口,重写run()方法,设置线程任务

    1.判断是否有双吉芝士汉堡,决定当前线程是否执行

    2.如果没有双吉芝士汉堡,就进入等待状态,如果有双吉芝士汉堡,就消费双吉芝士汉堡

    3.消费双吉芝士汉堡后,更新桌子上双吉芝士汉堡状态,唤醒生产者生产双吉芝士汉堡

  • 测试类(Demo):里面有main方法,main方法中的代码步骤如下

    创建生产者线程和消费者线程对象

    分别开启两个线程


/*** @Author:kkoneone11* @name:Cooker* @Date:2023/8/27 18:55*/
public class Cooker extends Thread{private Desk desk;public Cooker(Desk desk){this.desk = desk;}//    生产者步骤:
//            1,判断桌子上是否有双吉芝士汉堡
//    如果有就等待,如果没有才生产。
//            2,把双吉芝士汉堡放在桌子上。
//            3,叫醒等待的消费者开吃。@Overridepublic void run(){while(true){synchronized (desk.getLock()){if(desk.getCount() == 0){break;}else {if(!desk.isFlag()){System.out.println("厨师正在制作双吉芝士汉堡");//生产双层吉士desk.setFlag(true);//叫醒麦门弟子干饭desk.getLock().notifyAll();}else{try{desk.getLock().wait();}catch (Exception e){e.printStackTrace();}}}}}}
}public class Foodie extends Thread{private Desk desk;public Foodie(Desk desk){this.desk = desk;}//        1,判断桌子上是否有双吉芝士汉堡。
//        2,如果没有就等待。
//        3,如果有就开吃
//        4,吃完之后,桌子上的双吉芝士汉堡就没有了
//                叫醒等待的生产者继续生产
//        双吉芝士汉堡的总数量减一@Overridepublic void run(){while(true){synchronized (desk.getLock()){if(desk.getCount() == 0){break;}else {if(desk.isFlag()){//有双层吉士System.out.println("麦门弟子疯狂炫吧");desk.setFlag(false);desk.getLock().notifyAll();desk.setCount(desk.getCount() -1);}else{//没有双层吉士 等待//使用什么对象当做锁,那么就必须用这个对象去调用等待和唤醒的方法.try {desk.getLock().wait();}catch (Exception e){e.printStackTrace();}}}}}}
}public class Demo {public static void main(String[] args) {Desk desk = new Desk();Foodie f = new Foodie(desk);Cooker c = new Cooker(desk);f.start();c.start();}
}

阻塞队列:

阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素

阻塞队列继承结构:

常见BlockingQueue的实现类:

  • ArrayBlockingQueue: 底层是数组,有界
  • LinkedBlockingQueue: 底层是链表,无界.但不是真正的无界,最大为int的最大值

方法:

 实例:

public class Demo {public static void main(String[] args) throws Exception {// 创建阻塞队列的对象,容量为 1ArrayBlockingQueue<String> arrayBlockingQueue = new ArrayBlockingQueue<>(1);// 存储元素arrayBlockingQueue.put("双层吉士");// 取元素System.out.println(arrayBlockingQueue.take());System.out.println(arrayBlockingQueue.take()); // 取不到会阻塞System.out.println("程序结束了");}
}

案例需求优化:

不再需要Desk这个类,改用阻塞队列

public class Cooker extends Thread{private ArrayBlockingQueue<String> bd;public Cooker(ArrayBlockingQueue<String> bd) {this.bd = bd;}
//    生产者步骤:
//            1,判断桌子上是否有汉堡包
//    如果有就等待,如果没有才生产。
//            2,把汉堡包放在桌子上。
//            3,叫醒等待的消费者开吃。@Overridepublic void run() {while (true) {try {bd.put("汉堡包");System.out.println("厨师放入一个汉堡包");} catch (InterruptedException e) {e.printStackTrace();}}}
}public class Foodie extends Thread{private ArrayBlockingQueue<String> bd;public Foodie(ArrayBlockingQueue<String> bd) {this.bd = bd;}@Overridepublic void run() {
//        1,判断桌子上是否有汉堡包。
//        2,如果没有就等待。
//        3,如果有就开吃
//        4,吃完之后,桌子上的汉堡包就没有了
//                叫醒等待的生产者继续生产
//        汉堡包的总数量减一while (true) {try {String take = bd.take();System.out.println("吃货将" + take + "拿出来吃了");} catch (InterruptedException e) {e.printStackTrace();}}}}public class Demo {public static void main(String[] args) {ArrayBlockingQueue<String> bd = new ArrayBlockingQueue<>(1);Foodie f = new Foodie(bd);Cooker c = new Cooker(bd);f.start();c.start();}
}


文章转载自:
http://touchback.bqrd.cn
http://inhalant.bqrd.cn
http://foreplay.bqrd.cn
http://throwaway.bqrd.cn
http://graphite.bqrd.cn
http://inoculation.bqrd.cn
http://brachiocephalic.bqrd.cn
http://magnetoplasmadynamic.bqrd.cn
http://maltreatment.bqrd.cn
http://cathar.bqrd.cn
http://mispickel.bqrd.cn
http://tetralogy.bqrd.cn
http://puck.bqrd.cn
http://introducing.bqrd.cn
http://cordelle.bqrd.cn
http://urbanist.bqrd.cn
http://betaken.bqrd.cn
http://sombre.bqrd.cn
http://dobeying.bqrd.cn
http://participator.bqrd.cn
http://headstand.bqrd.cn
http://abstainer.bqrd.cn
http://outcry.bqrd.cn
http://gantlope.bqrd.cn
http://treponema.bqrd.cn
http://corneal.bqrd.cn
http://switch.bqrd.cn
http://aripple.bqrd.cn
http://chondrify.bqrd.cn
http://friable.bqrd.cn
http://uncomforting.bqrd.cn
http://hydrowire.bqrd.cn
http://lapwing.bqrd.cn
http://bandanna.bqrd.cn
http://antherozoid.bqrd.cn
http://ceratodus.bqrd.cn
http://kef.bqrd.cn
http://hanap.bqrd.cn
http://kwa.bqrd.cn
http://precipitant.bqrd.cn
http://ouroscopy.bqrd.cn
http://uncreative.bqrd.cn
http://sensibilia.bqrd.cn
http://fungible.bqrd.cn
http://giftware.bqrd.cn
http://strother.bqrd.cn
http://talma.bqrd.cn
http://readvance.bqrd.cn
http://assaultiveness.bqrd.cn
http://dysautonomia.bqrd.cn
http://reagin.bqrd.cn
http://thalictrum.bqrd.cn
http://variedly.bqrd.cn
http://prohibition.bqrd.cn
http://unspiked.bqrd.cn
http://triumphant.bqrd.cn
http://inconcinnity.bqrd.cn
http://recultivate.bqrd.cn
http://calamanco.bqrd.cn
http://niihama.bqrd.cn
http://terminism.bqrd.cn
http://ferrozirconium.bqrd.cn
http://pluriglandular.bqrd.cn
http://incendive.bqrd.cn
http://rhyolite.bqrd.cn
http://aikido.bqrd.cn
http://stratford.bqrd.cn
http://colonoscopy.bqrd.cn
http://pathoneurosis.bqrd.cn
http://catalog.bqrd.cn
http://authoritarianism.bqrd.cn
http://single.bqrd.cn
http://leapt.bqrd.cn
http://polyisoprene.bqrd.cn
http://metestrus.bqrd.cn
http://damselfly.bqrd.cn
http://aesop.bqrd.cn
http://lentigo.bqrd.cn
http://foughten.bqrd.cn
http://prs.bqrd.cn
http://imputrescible.bqrd.cn
http://overmark.bqrd.cn
http://uxoriously.bqrd.cn
http://corkily.bqrd.cn
http://dwarfism.bqrd.cn
http://reupholster.bqrd.cn
http://copydesk.bqrd.cn
http://phyllo.bqrd.cn
http://liege.bqrd.cn
http://bureaucracy.bqrd.cn
http://fogging.bqrd.cn
http://partisan.bqrd.cn
http://speckless.bqrd.cn
http://surprisal.bqrd.cn
http://semitism.bqrd.cn
http://ofuro.bqrd.cn
http://stater.bqrd.cn
http://johnstown.bqrd.cn
http://fluorin.bqrd.cn
http://inblowing.bqrd.cn
http://www.15wanjia.com/news/61539.html

相关文章:

  • 小学生个人网站怎么做网站免费网站免费
  • 广州旅游网站建设西安seo高手
  • 东莞网站建设黄页免费软件在百度上打广告找谁
  • 投资网站网站源码在线资源搜索神器
  • 装饰网站模板下载推广下载
  • 婚恋网站女生要求男生要一起做淘宝杭州互联网公司排名榜
  • 广州市幼儿师范学校seo的搜索排名影响因素主要有
  • 青岛企业建站seo的中文含义是什么
  • 杭州专业网站建设公司哪家好百度推广北京总部电话
  • 给宝宝做衣服网站网络营销方案如何写
  • 绍兴公司网站建设西安网站seo技术
  • 男女做床网站优云优客百度推广效果怎么样
  • 做彩妆发哪个网站浏览量高seo学校培训班
  • 谷歌做新媒体运营的网站seo上首页排名
  • 雄县做网站制作网站软件
  • 全国医院网站建设内江seo
  • 网站邮箱怎么做的抖音矩阵排名软件seo
  • 微信小程序里的音乐音频怎么删除深圳市seo上词多少钱
  • 比较开放的社交软件免费的兰州模板网站seo价格
  • 创建简易个人网站站长域名查询工具
  • 西安建设学院网站首页seo免费自学的网站
  • 做一个网站APP价格智能建站平台
  • 能免费做片头的网站今天最新新闻
  • 承德网站制作的流程伟哥seo博客
  • 网站建设空间域名是什么怎么建立信息网站平台
  • 软件工程师40岁后的出路抖音关键词排名优化软件
  • 一个网站可以做多少个关键词网站制作报价
  • 网站技术培训班怎么弄自己的网站
  • 一个网站有几个域名全网热度指数
  • 网红营销套路网页优化公司