您好、欢迎来到现金彩票网!
当前位置:彩之网 > 子池队列 >

面试准备--线程池队列 ArrayBlockingQueue 详解

发布时间:2019-07-25 05:27 来源:未知 编辑:admin

  前面介绍已经介绍了线程池的三种队列了,剩下要学习的队列已经没多少了,今天我们继续来学习一下另一个队列 ArrayBlockingQueue ,这个队列很简单,下面我们来看一下类图。

  这里仅介绍会阻塞的 take 和 put 方法,其他方法和前面讲的队列类似。

  上面就是阻塞入队操作的实现了,方法很简单,一看就懂。下面是具体入队操作,也没有太难理解的代码。但有一点需要注意。如下代码中,当插入值时发现这个值是队列最后一个位置,会将插入队列的下一个入队位置的索引设置为 0。这样一做,就变成了环形队列的意思了。

  接着,我们将元素 A 进行入队操作。元素 A 入队后,取出值的索引不会变化,但是入队索引会偏移到下一个位置,如下图所示:

  我们继续进行入队操作,直到 putIndex 索引指向最后一个位置,如下图所示:

  这时,我们将元素 F 进行入队,我们会看到,putIndex 索引和 takeIndex 索引,又到回了初始时的位置,这就是上面说的环形队列,此时如果再有线程进行入队操作时,线程便会堵塞,直到元素被消费。

  这时来了一个线程,将队列中第一个元素取走。此时,队列中 putIndex 索引没有变化,而 takeIndex 索引指向了下一个位置。

  假设又来一条线程执行取出值操作,takeIdex 索引将会指向下一个位置。

  我们继续进行出队操作,直到 takeIndex 索引指向最后一个位置,如下图所示:

  上面就是介绍了环形阻塞队列的具体实现,总体来说没太大难度。但是这里需要补充一下代码设计的小细节,先看看下面两个代码小细节。

  可以看出主要用while循环来进行判断。既然是判断,那我们也可以使用if来进行判断。按正常来说使用if也没有问题。

  但是这里不行,这里我们需要知道一个多线程的设计模式 –Guarded Suspension(保护性暂挂模式)

  这种设计模式具体我还没学完,不过可以这样理解:假设我们使用if语句,那线程到此时被挂起,在被唤醒之后会继续往下执行,这是允许的。而while的话,被唤醒依旧在循环中,只有不满足的条件下才会继续向下执行。

  一、简历准备 1、个人技能 (1)自定义控件、UI设计、常用动画特效 自定义控件 ①为什么要自定义控件? Android本身提供了很多控件,但是这些控件并不能满足我们所有的要求,现在用户的要求越来越高,这就要求我们做出的软件除了功能要齐全外,还要给用户比较炫比较人性化的体验...

  JS 基础 数据类型 JavaScript的数据类型分为两类,原始类型和对象类型 原始类型 数字 字符串 布尔值 null undefined 除了这些原始类型外其他的都是对象类型 null 和 undefined 区别 null用来描述空值;undefined用来表明变量...

  立长志,常立志”这是高中数学王老师说的一句话,很有教育意义,然而我并不是完全能够做到的,总是处于常立志的状态中,而且志通常大同小异。 我想上一个很牛的大学,别人一提起来就特别牛的样子。 我想对心理学有一个深入的研究。 我想有规律的,健康的,向上的生活。 我想像李参,萧...

  今天来分享一下移动端网页适配。 背景 科技在不断的发展,人们的生活也在发生着翻天覆地的变化,其中一个重要变化就是移动设备的变化。手机,平板貌似都成了日常生活的必备。手机最初是作为一个通讯设备出现在人类的生活中,时至今日,手机已经不再是一个简简单单的通讯设备那么简单的事情了,...

  0521 下午3点吃了蒜蓉,晚上睡觉天气凉,睡草席,越睡越冷越睡越硬,凌晨两点多把席子抽了才睡着

  便捷时代来啦!真的是即插即用 !!! 接下来!讲大事! 华普冠科推出的模拟高清数据信号转USB接口应用产品上线啦~该系列产品稳定性高,能够兼容所有平台,即插即用、高清无损,不黑屏、不丢帧、不拖尾、强抗干扰。 产品亮点 采用同轴线

http://ibtlsports.com/zichiduilie/260.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有