绍兴家[教:【【高】并发】 不空[话,{言简意赅先}容BlockingQueue

admin 4周前 (10-02) 科技 53 1

‘写(在)前面’

最近,【有不少网友留言】提问:(在)Java《的并发编程中》,《有》个BlockingQueue,{它是个}〖壅〗‘(闭)’行【列】,为何要(在)并发编程里使<用>BlockingQueue呢?〖好(吧)〗,今天,(就暂且说一下)BlockingQueue(吧),(不外今)天说的不是很深{入},后面咱们一起从源头上深{入}剖析这个类。

BlockingQueue“概述”

〖壅〗‘(闭)’行【列】,是线程平安的。

被〖【壅‘(闭)’】〗的情形如下:

(1){当行【列】满时},举行{入}行【列】操作
(2) 当行[【列】空时,〖举行出行【列】操作〗

使<用><场景>如下:

主要(在)生产者〖和〗消费者<场景>。

BlockingQueue‘的方式’

BlockingQueue <具有> 4 组差别‘的方式’<用>于插{入}、<(移除)『 以[』及对行>【列】中的元【素举行〖检查〗】。‘若是请求的操作不能获’得立<【(刻)执行】>的话,‘每个方式的’显示也差别。<这>些方式如下:

“抛出”异常 特殊值[ 〖【壅‘(闭)’】〗 【“超时”】
插{入} add(e) offer(e) put(e) offer(e, time, unit)
(移除) remove() poll() take() poll(time, unit)
〖检查〗 element() peek() 不可<用> 不可<用>


<四组差>别的行为方式注「释」

  • “抛出”异常

『若是试图的』操作无法立<【(刻)执行】>, 抛一个异常[。

  • 特殊值[

『若是试图的』操作无法立<【(刻)执行】>,返回一个特定的值(《常常是》 true / false)。

  • 〖【壅‘(闭)’】〗

『若是试图的』操作无法立<【(刻)执行】>,该方式挪<用>将会发生〖【壅‘(闭)’】〗,「直」到能够执行。

  • 【“超时”】

『若是试图的』操作无法立<【(刻)执行】>,该方式挪<用>将会发生〖【壅‘(闭)’】〗,「直」到能够执行,‘但守候时间不会跨’越给<定值>。返回一个特<定值>『 以[』见告【该操作是否乐】成(‘典型’的是 true / false)。

BlockingQueue「的」实现类

  • ArrayBlockingQueue:有界的〖壅〗‘(闭)’行【列】({容量有限},必须(在)初始化的时刻指「定容量巨(〖细〗)」,‘容量巨(〖细〗)指定后就’不能{再转变}),‘内部实现’是一个数组,『 以[』FIFO‘的方式’存储数据,最新插{入}的工具是尾部,最新(移除)的工具是头部。
  • DelayQueue:〖【壅‘(闭)’】〗的是内部元素,DelayQueue 中[的元素必须实现一个【【“接口”】】——Delayed(存(在)于J.U.C下)。Delayed【【“接口”】】继续了Comparable【【“接口”】】,‘这是由于’Delayed【【“接口”】】中的元素需要举行{排序},{一样平常情形下},‘都是’根据Delayed【【“接口”】】中的元素过时时间的优先级举行{排序}。应<用><场景>主要有:准时关‘(闭)’毗邻、(缓存工具)、【“超时”】处置等。内部实现使<用>PriorityQueue〖和〗ReentrantLock。
  • LinkedBlockingQueue:‘巨(〖细〗)’设置是可选的,<若>是初始化时指定了巨(〖细〗),{则是有}界限的;〖若〗是初始化时未指定巨(〖细〗),则是“无界限”的(实(在)默认巨(〖细〗)是Integer《类型》的最大值)。「内部实现时一个链表」,『 以[』FIFO‘的方式’存储数据,最新插{入}的工具是尾部,最新(移除)的工具是头部。
  • PriorityBlockingQueue:带优先级的〖壅〗‘(闭)’行【列】,“无界限”,但是有{排序}规则,允许插{入}空工具(『也就是』null)。所有插{入}的工具必须实现Comparable【【“接口”】】,行【列】优先级的{排序}规则(就是根据对)Comparable【【“接口”】】的实现来界说的。可『 以[』从PriorityBlockingQueue《中获得一个‘迭代’器》Iterator,《但这个‘迭代’器并》不保证『根据』优先级的顺序举行‘迭代’。
  • SynchronousQueue:<行【列】内部仅允许>容纳一<个元素>,当一个线程插{入}一<个元素>后,就会被〖【壅‘(闭)’】〗,除非这<个元素>被另一个『线程消费』。因此,(也称)SynchronousQueue【为同步行【列】】。SynchronousQueue“是一个无”界非缓存的行【列】。《准确》的说,(它不存储)元素,放{入}元素只有守候取走〖元素之后〗,才气再次放{入}元素。

写(在) 最后[

若是『 以[』为文章对你有点【辅助】,请微信搜索并关注「 『冰河【手艺】』 」‘微信’民众号,{跟冰河学习高并发}编程【手艺】。

最后[,附上并发编程需要掌握的焦点技术知识图,祝人人(在)学习并发编程时,{少走弯路}。

,

阳光(在)线

阳光(在)线www.sssmobilesss.com(原诚信(在)线)现已开放阳光(在)线手机『版下载』。阳光(在)线游戏公平、【公开】、〖公正〗,<用>实力赢取信誉。

Allbet声明:该文看法仅代表作者自己,与本平台无关。转载请注明: 绍兴家[教:【【高】并发】 不空[话,{言简意赅先}容BlockingQueue

网友评论

  • (*)

最新评论

  • Allbet手机版下载 2020-10-02 00:00:30 回复

    Allbet手机版下载欢迎进入Allbet手机版下载(www.aLLbetgame.us):www.aLLbetgame.us,欧博官网是欧博集团的官方网站。欧博官网开放Allbet注册、Allbe代理、Allbet电脑客户端、Allbet手机版下载等业务。赞的不得了~

    1

文章归档

站点信息

  • 文章总数:762
  • 页面总数:0
  • 分类总数:8
  • 标签总数:1359
  • 评论总数:351
  • 浏览总数:33055