00:01
那我们。简单的说了一下阻塞队列它的实际用情况,一个火锅店,一个银行,医院,排队不得不阻塞或者欢迎阻塞情况那么好,既然这个东西。存在必然会有原因,那么我们来看看实际工作中我们需要面对什么。先拉个大的话题,就当杨哥现在先拉虎皮做大题。去年的时候,同学们已经干过一件事,在多线程编程的时候,已经学过一个东西,叫生产者消费者模式,同学们还有印象吧?两个线程AB2线程A生产一个,B消费一个,A生产一个,B消费一个。还记不记得你需要用snch wait notify这三大关键词。好,那么接下来先留这边,旗高高的举起来,我先埋一个雷。后续我们来看看你为什么要学这些新技术。可以这么讲。你现在录代码是为了。技术更好以后获得更高的薪酬,但是你反过来讲。
01:03
你只要听了我这门课以后,你包括可能有些同学半个月以后上班了,你会发现你用不到我讲的这些,为啥中小型公司它的业务没那么复杂。他用不到好,总有一天你要跳槽,为毛你想要的那个7万值这个薪水,比方说月薪两万五以上,能给得起这样的薪水的只有大产。但是这个时候你进大厂以后,你会发现考的就是这些。他不会考你基础知识,就拿这些。过滤。那么这个时候干嘛?如果你平时做着积累,刷着大厂的题目,直到你想要什么,并做着针对性的准备,那么总有一天你会用到我现在、今天下午所讲这些。那么今天下午干嘛?我们一定会给大家手写一个线程池,让你彻底理解这些东西。好,那么同学们,我们开工。首先队列加左侧队列。先说理论。来。首先是个队列。必然会有序fio先进先出,同学们秒懂。
02:03
做结构,这是一个阻塞队列。线程一,往里面生产,或者往里面插入,往里面增加,增加线程二,这个叫生产线程,这个叫消费线程,往里面取。那么,何为阻塞队列?给大家总结好。当阻塞队列是空的时候,从队列中获取元素的操作将会被阻阻塞。当队列是满的时候,往队列中插入元素的操作将会被阻塞,这个就是阻塞队列。给大家。30秒钟,细细的。揣摩一下这段话,先理解了,咱们再往下走,不着急。好,先说完理论是什么,然后咱们再说为什么。这个题我一句话给你讲懂何为主色队列大家都用过,妹子们经常去什么味多美蛋糕店?
03:02
我们就这么说。这个主色队列就是卖蛋糕的是吗?蛋糕的食品柜台。如果这个柜柜台里面。蛋糕是空的,那么呢,消费者想从这个味多美蛋糕店的食品柜里面获取蛋糕的操作将会被阻塞。能理解能想得通吧?我现在去买蛋糕,根本没生产出来呢,蛋糕柜子里面蛋糕是没有的,那么这个时候我非要去消费,我非要去买无蛋糕卖给你,这个时候干嘛?有价无市。那么好。当队列是满的时候,对谁说对?味多美蛋糕店的做蛋糕的师傅,我现在这个食品柜子我能放十个蛋糕,一个都没卖出去,我再去生产,没必要,生产出来时候装不进去了,那么这种时候干嘛?当队列是满的时候。蛋糕,蛋糕店的蛋糕柜子,蛋糕已经满了。生产现场,也就是后台的厨师,蛋糕师傅再去做,蛋糕要放进去,第一个放不进去,第二个,这个时候是产能过剩,这一步同学们能跟上。所以说。
04:12
空了消费者阻塞,满了生产者阻塞,这就是什么阻塞队列,OK?好。相信买蛋糕这个case大家都明白。那么接下来。试图从空的阻塞队列中拿元素,被阻塞柜子是空的,没东西可卖,空柜子你买不了,有钱也没用。同样。师徒已经满了。生产的快吐了,你吃你已经吃顶了,今天我请你,我请你吃饭。好吧,那么这事干嘛?我们只好其他县城当中。拿走一个,我们再生产一个。回答我,那这种情况有没有点像我们去年讲的生产者消费者模式啊?所以说。基本上。和百度的缘起。写一个生产者消费者模式,他会考你什么,紫色队列他需要你,要求你写最新版,那么好,为了保证大家对知识的深刻和理解,我待会儿会用一个案例,把我们从周一讲到今天的全部知识点,用一个案例全部串起来。
05:15
那么你就会彻彻自己明白这个东东怎么玩。如果你下个月你去面试,笔试的时候考到,请写一个是吧,阻塞队列用我这个版本,第二个100%会问你什么?MQ消息中间件的核心底层原理就这货。跟着我来,慢慢深入。为什么用?有什么好处?首先,多线程领域阻塞。线程,其说白了就是控制什么,谁动谁不动,该阻塞谁,该堵塞谁,该唤醒谁,该通知谁,这个非常技巧。那某些情况下会挂起?什么叫会挂起?比方说兄弟们,你们一定用过一个什么SYNCH,里面是不是有个东西叫wait和notify。
06:00
Wait等这不许做这个线车你给我停这那么。这个挂了,一旦把条件满足,被挂起的线程又会自动被唤醒,好兄弟们,Notify,是不是自动唤醒所有等待的线程,该谁抢到是谁?那么为什么需要?好处是我们不需要关心什么时候线程阻塞线或什么时候需要阻塞线程。这就爽了,那把这句话你读通了以后,你能得到的结论是什么?哦,那我明白了,如果我们建立在阻塞队列这种数据结构,程序员从此不用自己去控制wait和notify,全是自动化。他牛逼就牛逼在这儿,可以从陈学的什么繁杂的技术细节里面给你解脱,哎呀,总之一句话,你就看这个柜子,大家都不是瞎子,蛋糕满了。后台厨师,生产者现成跟主色蛋糕,柜子空了,消费者现成主色没有蛋糕可卖。那么这时候跟我讲,是不是根本不用什么wait和notify?好,那么来。
07:00
这一去。堵塞队列,一手包办。立发包发布之前,我们每个程序员都必须去控制这些细节,尤其还要兼顾效率和现场安全。待会的话呢,我会给你们对比,非常爽,你读懂了以后你才会明白,道格里这个大神写了GDK1.5的源码以后,会写得如此之牛逼。确确实实,计算机这个东西确实是讲天分和情分。神是人,只能仰视,我是给贵了,我读完以后,我觉得确实讲的很好,待会你们会体会到。那么它的好处说白了。程序啊,你用这个数据结构,你不要自己去管,阻塞和唤醒交给我,我来给你告,说白了,你现在买车,你从手动挡换成了自动挡,明白。OK,那么再下来。核心方法,那么它是什么?以后或者这样吧,我们先来看看它的架构。我们待会再说用。架构什么概念呢?
08:02
兄弟们,这货肯定用过吧,List。注意啊,现在呢,怎么考的话呢,就是有一道面试题哈,它是这个大肠为了过滤这个一般。零基础的。或者说学的不好的Java程序,一言不合就问你一题,Java集合类你用过吧?那这道题你不敢摇头吧?摇了你是不是就鸡鸡了?那绝对一首凉凉送给你,你只能点头。好。都是坎,等着你没事儿见招拆招。这事呢,干嘛呢?基本上杨哥听过这么多学生面试回来反馈过,反馈过的,当场面试录音了以后。基本上呢,就这个套路,好,你点头了,他是不是会继续问,都这样,就他等着你,你放心,重点but在最后。你用过Java集合类,你只能点它。接口熟不熟悉?点头,还想什么对不对?
09:01
就当活动一下关节,听懂了吧?好。再来你用过这个list以后。套弹呢是第三问。马上问你,你除了用过I list和link list,还用不用过其他的?因为什么?所有的it技术公司,他们也在进化,甚至啊,他们招聘了各大培训机构培训出去的Java程序员。他明白,培训班只讲这两个,只要讲这两个的干嘛。不是找不到工作,而是什么薪水一般很难突破一万三左右。他故意压你这个价,他我明白,OK,好了,你也,你也不,我不管你什么几年工作经验,什么乱七八糟的无所谓,我也懒得去调查,做背景调查,给HR添加负担,他说没有用过啦。那么恭喜你,你一定就是什么我准备压价的那个货色,听懂了吧?当然,现在你们应该回答什么?我们是不是讲过一个东西叫copy right list?还记不记得周二讲过的好,那么接下来呢?
10:02
到今天了,你就跟他讲,我们还用过什么?好,那么兄弟们,我们往下翻。首先list这个接口,那负接口谁呀?是collection,好,那过来。那么我们呢?直接。老。马上就会明白。绿色接口的老爹是不是collection?好,那么这个时候呢,我们呢,再来看。他现在。直接还有一些其他新的子类,那么比方说block。那言下之意什么概念?去年大家在基础篇的时候是不是只学过list接考?但是现在复杂了。还是这个类的子,这个接口的子接口,我们要学一个新的,你看这个货是啥,是不是还是接口啊,那么言下之意干嘛呢?这个就叫阻塞队列接口,现在考的是这个。
11:04
也就是说list接口他已经不爱听了,你跟他聊block阻塞,那么OK过来。那么这个时候呢?我就懒得一一帧一帧的往下翻了。那么来,同学们。首先我们在这儿可以看到collection接口下面有两个子接口,一个叫list,由于list同学们已经很熟悉了,我就不再展开,OK。另外一个接口block。那么。别忘了这哥们干嘛呢,他。中间又有一个。说白了,List左边这个叫队列,右list这个干嘛?是我们的列表?K这个是不是叫我们队列?但是队列又分很多种阻塞队列又是其中一种子接口,那么来同学们collection接口。队列接口。阻塞队列接口,这个组织架构能跟上兄弟们。
12:00
好,凡接口必然会有实现类。那么呢?相当于我们的list接口,哎呀,有list link list什么乱七八糟的,不多废话了一样,这哥们也不是省油的灯,功能极其强大,现在干嘛?在消息系统里面,基本上底层就是支柱。好,那接下来爽死你啊。一堆,我数了一下,常用的嘛,刚好七个,没错吧,12345。677个金刚葫芦娃。好,那么这事呢,我们呢往下翻。直接弄出来以后。抬高。请看。A Brooklyn。你就记着这么讲。Are,熟悉吧。你就把那个list现在换成broken。就这么简单讲完了。好,那么接下来我们就唠唠。A broken是由宿组结构组成的什么鬼?
13:02
有界阻塞队列,什么叫有界啊?内存空间,你这个就说白了,R list我们都明白,我当我们六那个list默认的话是底层六的初始值是十啊。之后再扩容,这说白了,List是什么意思啊,就是数组,数组该不该给定一个初始值啊,因为数组的底层数结构是需要在GM的内存里面连续的开片,初始值得给我一个连续的,没问题吧。再来link的block,那么一定用过,是不是个link link list没问题吧?我们干嘛呢?由链表结构组成的,也是有界阻塞队列。但是呢,这个货比较坑爹。这个基本上。干嘛呢?慎用,用是要有技巧的,为什么呢?他跟你就是上面这个ARRA是数组构成,下面这个是link的是链表构成,一个是数组,一个是链表,是不是数据结构里面两大最基础的结构,默认它倒没什么事,坑爹是坑哪啊,他坑你坑在这儿。组成的什么有界阻塞队列?
14:01
那它确实是有界,那这个界多大?引体甲max value。那么这个多大呢?21页。46473647姐姐。你六一个数组不可能六二十一的。这种情况下导致什么呢?我们后面讲现成时一定要注意这个数字啊,绝对不允许干这活。这种情况就变成什么。有点类似于好,你们干嘛呢?没错,我要送你个礼物,绝对那有恐龙蛋那么大的一个钻石,没问题,虽然说我不会向你求婚。但有个前提,你二月37号来找我拿。那这他妈是不是扯淡?二月哪有37号?那么这事干嘛?你有借?但是你的借这么大,21亿,那么跟无借有什么区别吗?所以说理论上这个货确实有借,但你这个借太大了,21亿左右,那么这个时候呢,干嘛呢,我们呢,可以把它当做是什么。
15:02
也可以把它当做是无解了,那么同学们漏,那么这个时候接近是21页。21页47483647没错吧。好,那么这个货你如果你有一个数组或者是链表21这么大不OK来。接下来。Property优先级。抵赖,使用优先级实现的延迟,无无界的阻塞队列。那么好,注意有没有发现我刷红了三个。重点就这三个,因为线程池的底层就是用这三个,所以我们不可能讲七个,我们时间关系就讲三个。那么好。这叫什么?同步队列,不存储元素的阻塞队列,注意什么不存储?但是队列你懂的,是不是永远要存储啊?那什么叫不存储啊?也即单个元素的队列。
16:00
回答我。这是官网翻译过来的,有没有发现每一个中文你都懂,那读完以后你还是不懂?跟废话一样。我也没办法,所以根本看书没用,你你得什么?听老司机带。一句话讲明白,抬头。属于。专属个人定制版,我这个队列有没有有,我只有一个元素,你生产了以后,你不取走,我不生产第二个,你只要取走了第一个,我马上生产第二个,永远是生产一个,消费一个,生产一个,消费一个,有且仅有一个听懂。专属定制版,你这个订单不下,我不开高。奢侈品,奢侈品行业都这样的,比方说著名球星。干嘛?贝克汉姆,它基本上它那些东西是定制的。小不下单,工厂不开工,秒懂。好。那么接下来。我们呢,把这几个梳理以后切记啊。我们的broke是什么接口啊,跟我们list,跟我们这list接口差不多。
17:04
剩下的同list,因为Java集合类它的组织架构都是平级。那么既然我们在这儿已经从理论上的学习,先list。和block PIN组织队列,这两个接口是不是平级啊?那么好,下面的方法一样,这个叫a list,这个叫I block,这个叫link list,这个叫linked blocking。举一反三,同学们能跟上好。那么理论知识。完成以后,我们呢,进入到我们的第二章节。主侧队列的。核心方法。但是在说这个方法之前,需要再给同学们说一个坑爹的现象。有没有发现?这七个阻塞队列,我最后一个用这个。De。什么意思呢?这不是我写错啊,你放心。来吧。
18:01
我们呢,直接找到我们的阻塞队列。我放大点,同学们能看清吗?够大了吧。来看de q UE q ue2回事啊,千万不要写错,我原来就是什么自动提示键,手键,本来用六这个又成这个了,完全性能不一样,为毛?这个是double板,你看这什么双端队列。这是单边的。OK,所以说请同学们一定要注意,这个是由链表组成的是吗?双向阻塞,所以说故意把颜色涂成这个,跟前面有点区别,但这个也不是我们的重点,就红色的这三个,OK,好,那么来同学们。那么至于说这个是什么东东呢?待会我们说,因为比如说哈。A list link list,我个人认为与同学的基础我可以闭嘴了,都用过吧,就像好比什么A瑞block king link的block king一样,只不过把那个list换成阻塞队列,这个我就不说了。
19:01
但是呢,同步阻塞队列还那句话。第一板斧理论我讲完了,那么第二板斧代码呢?所以说这个我要给大家讲一下,什么叫专属定制版,这个比较好,你做急速的消息转发的时候,是有一个马上转,有一个马上转,这个会用得到,待会我们来演示啊,但是在演示这些之前呢,我们需要了解完七种阻塞队列全部的特性以后,能不能这个阻塞队列牛逼的地方在这儿。干嘛呢?一堆堆方法你要去用,那你用多少个,你自己找AP箱一个个的用错,我给你全部搜罗好,你工作中基本上只会用到这四组。OK。好,那么这个就是我们阻塞队列的是吗?架构。理论知识的讲解,下一讲我们来说怎么用。
我来说两句