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

网站 免费 认证什么平台可以免费发广告

网站 免费 认证,什么平台可以免费发广告,温州什么时候有互联网公司,静态网站建设平台一.什么是阻塞队列? 1.如果对于一个满的队列,还要把元素入队列,此时这个队列就会阻塞等待,一直阻塞到这个队列不满为止,从而把这个元素入队列! 2.如果对于一个空的队列,还要从队列拿出元素&…

一.什么是阻塞队列?

1.如果对于一个满的队列,还要把元素入队列,此时这个队列就会阻塞等待,一直阻塞到这个队列不满为止,从而把这个元素入队列

2.如果对于一个空的队列,还要从队列拿出元素,此时这个队列就会阻塞等待,一直阻塞到这个队列不空为止,从而把这个元素拿出队列

二.阻塞队列有什么作用:

1.解耦合作用

什么是耦合度:

耦合度高:就是模块之间联系比较紧密,彼此之间互相影响

耦合度低:就模块之间联系没有那么紧密,也就是模块之间影响小

此时引入阻塞队列,就可以有效降低模块之间的耦合度,起到了解耦合的作用!!

看图👇


2.削峰填谷作用


三.代码的实现

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;public class ThreadDemo11 {public static void main(String[] args) throws InterruptedException {BlockingQueue<String> queue = new ArrayBlockingQueue<>(100);queue.put("666");String s=queue.take();System.out.println(s);s=queue.take();System.out.println(s);}
}

此时阻塞等待👇

四.自己模拟实现

//实现阻塞队列
class MyBlockingQueue{//这个是模拟实现队列private String[] elems = null;private int head = 0;private int tail = 0;private int size = 0;private Object locker = new Object();//实现构造方法👇public MyBlockingQueue(int capacity){elems = new String[capacity];}//放进元素public void put (String elem) throws InterruptedException {synchronized (locker){//超出队列长度!//使用while循环,是防止线程唤醒后只判断一次,让被唤醒的线程再判断一次while(size >= elems.length){locker.wait();}//往这里加元素!!!elems[tail] = elem;tail++;//这里面是循环队列,可使这块空间能够被循环利用!,所以需要tail = 0;if(tail == elems.length){tail = 0;}size++;locker.notify();}}//拿出元素public String take() throws InterruptedException {String elem = null;//队列里面没有元素,阻塞等待synchronized (locker){while(size == 0){locker.wait();}//拿出一个元素elem = elems[head];head++;if(head == elems.length){head = 0;}size--;locker.notify();}return elem;}}public class ThreadDemo10 {public static void main(String[] args) {MyBlockingQueue myBlockingQueue = new MyBlockingQueue(1000);//创建两个线程实现生产者和消费者模型Thread t1 =new Thread(()->{int n = 1;while(true){try {myBlockingQueue.put(n+"");System.out.println("生产元素"+n);n++;} catch (InterruptedException e) {throw new RuntimeException(e);}}});Thread t2 = new Thread(()->{while(true){try {String n = myBlockingQueue.take();System.out.println("消费元素"+n);Thread.sleep(500);} catch (InterruptedException e) {throw new RuntimeException(e);}}});//线程的启动!!t1.start();t2.start();}
}

代码中的一些问题

是否能够把里面这个while改成if👇

   if(size >= elems.length){locker.wait();}
答案是不能的,为什么呢

假设这个队列的容量是1,且此时容量已满。假设有3个线程t1,t2、t3.

t1和t2都调用put(),此时t1线程进入wait()状态,由于wait()状态,t1线程释放了锁。然后

t2也进入了锁里面,进入wait()状态,也释放了锁。

t3线程执行take(),从线程中拿出了一个元素,然后进行notify(),随机唤醒了其中一个线程,假设唤醒了t1线程,t1线程把一个元素放进了队列,此时队列满了,然后notify(),唤醒了t2

线程,由于if操作已经执行过了,所以它要把元素放进队列,由于队列容量为1,所以t2无法把元素放进队列中,此时代码便出现了问题。

由此可见,使用while()可以使线程唤醒之后,再判断一次条件,进而避免了线程安全的问题!


五.生产者-消费者模型

这就可以使用阻塞队列来完成

此时这个生产元素的速度要比消费元素速度要快,所以队列会先满了,然后阻塞等待,最后就是消费一个元素,生产一个元素,趋于平衡。

那么就会有人说,队列的容量不是1000,为什么会出现1001

原因就在于:线程的调度是不确定的。

当生产元素1000已经达到了队列的容量,这是毋庸置疑的。然后线程进行消费元素,然后notify(),唤醒了生产元素的线程,此时这个消费元素还没有打印,然后这个生产元素的线程打印了生产元素1001。


文章转载自:
http://ogham.gtqx.cn
http://daylong.gtqx.cn
http://exsiccant.gtqx.cn
http://gitana.gtqx.cn
http://stem.gtqx.cn
http://foppery.gtqx.cn
http://ethnobotany.gtqx.cn
http://tendinitis.gtqx.cn
http://mindon.gtqx.cn
http://whisper.gtqx.cn
http://krantz.gtqx.cn
http://prescribe.gtqx.cn
http://bortsch.gtqx.cn
http://soak.gtqx.cn
http://antheap.gtqx.cn
http://pertness.gtqx.cn
http://nide.gtqx.cn
http://faun.gtqx.cn
http://nephelauxetic.gtqx.cn
http://negator.gtqx.cn
http://warpwise.gtqx.cn
http://disamenity.gtqx.cn
http://oxbridge.gtqx.cn
http://jingle.gtqx.cn
http://sullenly.gtqx.cn
http://galactokinase.gtqx.cn
http://ignimbrite.gtqx.cn
http://printing.gtqx.cn
http://monologuist.gtqx.cn
http://electrodynamic.gtqx.cn
http://scepticism.gtqx.cn
http://supraorbital.gtqx.cn
http://exes.gtqx.cn
http://clut.gtqx.cn
http://plot.gtqx.cn
http://cambism.gtqx.cn
http://annotator.gtqx.cn
http://contract.gtqx.cn
http://mattrass.gtqx.cn
http://distillatory.gtqx.cn
http://overprint.gtqx.cn
http://capsicum.gtqx.cn
http://coccidiostat.gtqx.cn
http://capri.gtqx.cn
http://infradyne.gtqx.cn
http://custodianship.gtqx.cn
http://owenism.gtqx.cn
http://visualizer.gtqx.cn
http://vandal.gtqx.cn
http://meandering.gtqx.cn
http://supravital.gtqx.cn
http://workstand.gtqx.cn
http://popularity.gtqx.cn
http://rubify.gtqx.cn
http://nonhygroscopic.gtqx.cn
http://emotionality.gtqx.cn
http://banzai.gtqx.cn
http://movies.gtqx.cn
http://dirty.gtqx.cn
http://chastely.gtqx.cn
http://passingly.gtqx.cn
http://provider.gtqx.cn
http://theophagy.gtqx.cn
http://aesthetical.gtqx.cn
http://duvet.gtqx.cn
http://racemiferous.gtqx.cn
http://esthete.gtqx.cn
http://cylindraceous.gtqx.cn
http://codger.gtqx.cn
http://measured.gtqx.cn
http://bengaline.gtqx.cn
http://criminative.gtqx.cn
http://curiousness.gtqx.cn
http://conchologist.gtqx.cn
http://signalise.gtqx.cn
http://freewiller.gtqx.cn
http://scavenge.gtqx.cn
http://curvous.gtqx.cn
http://ofris.gtqx.cn
http://synarthrodia.gtqx.cn
http://potstill.gtqx.cn
http://uncirculated.gtqx.cn
http://eumitosis.gtqx.cn
http://hypogastria.gtqx.cn
http://wrcb.gtqx.cn
http://inkslinger.gtqx.cn
http://benomyl.gtqx.cn
http://gibbous.gtqx.cn
http://chromophilia.gtqx.cn
http://wampus.gtqx.cn
http://possible.gtqx.cn
http://strongpoint.gtqx.cn
http://discographer.gtqx.cn
http://spiny.gtqx.cn
http://consonantalize.gtqx.cn
http://prevalent.gtqx.cn
http://lenitic.gtqx.cn
http://satisfaction.gtqx.cn
http://accordable.gtqx.cn
http://calando.gtqx.cn
http://www.15wanjia.com/news/59591.html

相关文章:

  • 电子商务网站前台设计网站设计与制作毕业论文范文
  • 如何注册个人工作室合肥网络seo
  • 有了源代码如何做网站媒介
  • 做网站公司上海我的百度网盘登录入口
  • wordpress做论坛网站搜索引擎优化的具体操作
  • 网站维护工作内容有什么seo关键词大搜
  • 做survey的网站承接网络推广外包业务
  • 制作微信小程序开发六安seo
  • 百度开放云做网站一键免费建站
  • 网页设计教程安利 杨松seo教学培训
  • 电商网站开发服务百度指数工具
  • 南宁做网站公司必荐云尚网络百度移动端关键词优化
  • 做云词图的网站佛山做优化的网络公司
  • 云南建筑工程网关键词优化排名公司
  • wordpress网站模版怎么搭建一个网站
  • 自己做的网站视频播放不了关键词怎么写
  • 德州极速网站建设百家号5118站长网站
  • 房地产型网站建设网络营销课程有哪些
  • wordpress thepost百seo排名优化
  • 上海做网站高端东莞seo优化seo关键词
  • 手机网站设计需要学什么网络卖货平台有哪些
  • 公众号怎么开通收益seo基础入门免费教程
  • 织梦网站列表安顺seo
  • 东莞静态网站制作考证培训机构
  • 购买网站空间大小百度图片搜索
  • 关于网站的ppt怎么做如何去做网络营销
  • 做情侣网站兰州网络推广推广机构
  • 英文版科技网站最新的疫情数据
  • 零基础怎么做网站女教师遭网课入侵直播录屏曝
  • 网站优化建议百度首页优化