温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java高并发中的BlockingQueue分析

发布时间:2021-11-17 10:02:28 来源:亿速云 阅读:154 作者:iii 栏目:大数据

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

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分析”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI