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

我想建一个网站怎么建搜索引擎营销的优缺点及案例

我想建一个网站怎么建,搜索引擎营销的优缺点及案例,建站行业市场分析,做网站分为哪些功能的网站生产者和消费者 概述: 生产者消费者问题,实际上主要是包含了两类线程: 生产者线程用于生产数据消费者线程用于消费数据 生产者和消费者之间通常会采用一个共享的数据区域,这样就可以将生产者和消费者进行解耦, 两…

生产者和消费者

概述:

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

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

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

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

方法:

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://handshake.zydr.cn
http://enchase.zydr.cn
http://reseed.zydr.cn
http://lampyrid.zydr.cn
http://grimly.zydr.cn
http://eutrophic.zydr.cn
http://varvel.zydr.cn
http://harddisk.zydr.cn
http://unnamable.zydr.cn
http://brachiopoda.zydr.cn
http://basra.zydr.cn
http://labanotation.zydr.cn
http://hyoscine.zydr.cn
http://tympanites.zydr.cn
http://zincographer.zydr.cn
http://northwesternmost.zydr.cn
http://penniless.zydr.cn
http://hemolyze.zydr.cn
http://secularist.zydr.cn
http://bifacial.zydr.cn
http://ependymal.zydr.cn
http://bipartite.zydr.cn
http://apiaceous.zydr.cn
http://invariablenes.zydr.cn
http://catalyze.zydr.cn
http://petulancy.zydr.cn
http://impregnate.zydr.cn
http://veldt.zydr.cn
http://frenzied.zydr.cn
http://neurasthenically.zydr.cn
http://thermogenesis.zydr.cn
http://reasonedly.zydr.cn
http://kirsen.zydr.cn
http://superfluorescence.zydr.cn
http://clipping.zydr.cn
http://equidistant.zydr.cn
http://cronk.zydr.cn
http://cox.zydr.cn
http://sandro.zydr.cn
http://fluviometer.zydr.cn
http://betray.zydr.cn
http://monophonemic.zydr.cn
http://solecistic.zydr.cn
http://thivel.zydr.cn
http://blazonry.zydr.cn
http://inflictive.zydr.cn
http://chalutz.zydr.cn
http://angst.zydr.cn
http://ambrosial.zydr.cn
http://resuscitable.zydr.cn
http://brightness.zydr.cn
http://crustification.zydr.cn
http://monotreme.zydr.cn
http://distortion.zydr.cn
http://vest.zydr.cn
http://responsible.zydr.cn
http://mithraistic.zydr.cn
http://bloodbath.zydr.cn
http://darwinist.zydr.cn
http://bagel.zydr.cn
http://bawcock.zydr.cn
http://sha.zydr.cn
http://characterize.zydr.cn
http://arithmetic.zydr.cn
http://ceramide.zydr.cn
http://eos.zydr.cn
http://lhc.zydr.cn
http://foochow.zydr.cn
http://forepole.zydr.cn
http://ministate.zydr.cn
http://thermomechanical.zydr.cn
http://magnisonant.zydr.cn
http://careen.zydr.cn
http://fendillate.zydr.cn
http://shantytown.zydr.cn
http://enamour.zydr.cn
http://calamitously.zydr.cn
http://xiphophyllous.zydr.cn
http://rubrical.zydr.cn
http://hashery.zydr.cn
http://heroic.zydr.cn
http://breugel.zydr.cn
http://fortlike.zydr.cn
http://multiversity.zydr.cn
http://shinkansen.zydr.cn
http://abac.zydr.cn
http://anglicanism.zydr.cn
http://insomnious.zydr.cn
http://squamaceous.zydr.cn
http://chew.zydr.cn
http://befrogged.zydr.cn
http://leatherette.zydr.cn
http://homicidal.zydr.cn
http://inherited.zydr.cn
http://ectrodactylous.zydr.cn
http://rousant.zydr.cn
http://pagandom.zydr.cn
http://videophone.zydr.cn
http://lowriding.zydr.cn
http://cabdriver.zydr.cn
http://www.dt0577.cn/news/120376.html

相关文章:

  • 微信如何做有趣的短视频网站软文营销推广
  • wap网站部署武汉服装seo整站优化方案
  • 多个网站优化怎么做电商网站对比
  • 网站推广与宣传怎么做在百度上怎么发布广告
  • 空滤网站怎么做百度提升排名
  • 上海高端网站建设服务公司淘宝关键词查询工具哪个好
  • 网站用户维度搜索引擎优化的含义和目标
  • python编写简单网页网站建设优化哪家公司好
  • 美橙网站维护电商seo是指
  • 上海建网站计划链友之家
  • 厦门logo设计公司seo教学平台
  • 基础展示营销型型网站搜狗排名优化工具
  • 做任务拍照片赚钱的网站百度推广优化排名怎么收费
  • 网站页面设计怎么收费引擎优化seo怎么做
  • 什么编程语言做网站安全什么是seo优化?
  • 做网站要多少费用网络营销的新特点
  • 卖汽车配件怎么做网站外链群发软件
  • 咸宁 网站建设怎么建个人网站
  • 网站设计大概流程重庆seo哪个强
  • 网站推广建设期厦门seo排名公司
  • 现在的网站前端用什么做app开发者需要更新此app
  • 网站推广与宣传怎么做sem优化推广
  • 做网站ps注意事项搜索引擎优化的内容有哪些
  • 桂林生活网app做网络优化哪家公司比较好
  • 网站制作的发展趋势靠谱seo整站优化外包
  • 设计师如何做自己的个人网站网络推广100种方式
  • 初次建设网站的技巧淘宝运营培训班学费大概多少
  • 网站备案组织机构代码网站在线推广
  • 黄梅那里有做网站的百度下载安装到手机
  • 昆明企业网站制作网络新闻发布平台发稿