java高并发中的BlockingQueue分析

本篇内容主要讲解“java高并发中的BlockingQueue分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“java高并发中的BlockingQueue分析”吧!

创新互联建站专注为客户提供全方位的互联网综合服务,包含不限于成都网站设计、成都做网站、大同网络推广、微信小程序开发、大同网络营销、大同企业策划、大同品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联建站为所有大学生创业者提供大同建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com

BlockingQueue就是阻塞队列。在某些情况下对阻塞队列的访问可能会造成阻塞。

java高并发中的BlockingQueue分析

会产生阻塞的情况有以下两种:

  1. 当队列满之后,进行入队操作;

  2. 当队列空之后,进行出队操作;

 因此,当一个线程对一个队列已满的情况下进行入队操作就会产生阻塞,除非有另一个线程进行出队列操作。同样当一个线程对一个空队列进行出队操作时也会被阻塞,除非有另一个线程进行入队操作。

    根据上面的特性可以知道,阻塞队列是线程安全的。通常用在生产者消费者场景。

实现类 ArrayBlockingQueue

    ArrayBlockingQueue是一个有界的阻塞队列(容量有限),内部使用数组实现,以先进先出的方式存储数据

实现类DelayQueue

    DelayQueue阻塞的是内部元素,DelayQueue中的元素必须实现一个接口,是J.U.C中的Delay接口(继承了Comparable接口)。DelayQueue中的元素需要进行排序。一般情况下按照元素过期时间的优先级进行排序。

    DelayQueue的使用场景:定时关闭连接、缓存对象、超时处理等。

实现类LinkedBlockingQueue

LinkedBlockingQueue的大小和配置是可选的,如果初始化时指定了一个大小,那么就是有边界的;如果不指定大小,那么就是无边界的(默认最大整型值,内部实现是一个链表)。也是以先进先出的方式存储数据。

实现类PriorityBlockingQueue

这是一个带优先级的阻塞队列,同时也是一个无边界的队列,但是有排序规则的。需要注意的是PriorityBlockingQueue是允许插入null(空对象)的。插入PriorityBlockingQueue的对象必须实现comparable接口,队列优先级的排序规则就是按照对接口实现来定义的。

实现类SynchronousQueue

内部仅允许容纳一个元素,当一个线程插入一个元素后就会被阻塞,除非元素被另一个线程消费。因此又称之为同步队列。是一个无界非缓存的队列,准确的说他不存储元素,只有等待元素取走之后才能放入。

到此,相信大家对“java高并发中的BlockingQueue分析”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!


本文题目:java高并发中的BlockingQueue分析
网页路径:http://cdiso.cn/article/ggpdpg.html

其他资讯