JUC--阻塞队列与非阻塞队

简介: JUC--阻塞队列与非阻塞队

@[toc]

阻塞队列与非阻塞队区别

队列

主要遵循先进先出,后进后出

阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列.

  • 阻塞式队列最大的好处,能够防止队列容器溢出,防止数据丢失
  • 非阻塞队性能要好一些,但是安全性,可用性不如阻塞队列

1.ArrayDeque, (数组双端队列)
2.PriorityQueue, (优先级队列)
3.ConcurrentLinkedQueue, (基于链表的并发队列)
4.DelayQueue, (延期阻塞队列)(阻塞队列实现了BlockingQueue接口)
5.ArrayBlockingQueue, (基于数组的并发阻塞队列)
6.LinkedBlockingQueue, (基于链表的FIFO阻塞队列)
7.LinkedBlockingDeque, (基于链表的FIFO双端阻塞队列)
8.PriorityBlockingQueue, (带优先级的无界阻塞队列)
9.SynchronousQueue (并发同步阻塞队列)

非阻塞式队列

ConcurrentLinkedDeque
在这里插入图片描述
ConcurrentLinkedQueue 同上

 ConcurrentLinkedQueue<String> objects = new ConcurrentLinkedQueue<>();

阻塞 队列

在这里插入图片描述

相关文章
|
消息中间件 缓存 Java
多线程应用——阻塞队列
用数组实现阻塞队列
79 0
|
存储 安全 算法
java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列
ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部;当我们获取一个元素时,它会返回队列头部的元素。
1413 0
|
安全 算法 API
非阻塞的无界线程安全队列 —— ConcurrentLinkedQueue
JUC 下面的相关源码继续往下阅读,这就看到了非阻塞的无界线程安全队列 —— ConcurrentLinkedQueue,来一起看看吧。
150 0
|
Java 算法 安全
java多线程之:SynchronousQueue队列
SynchronousQueue是这样一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有。      不能在同步队列上进行 peek,因为仅在试图要取得元素时,该元素才存在;      除非另一个线程试图移除某个元素,否则也不能(使用任何方法)添加元素;也不能迭代队列,因为其中没有元素可用于迭代。
1090 0
|
存储 前端开发 安全
【JUC并发编程】 详解锁与队列
【JUC并发编程】 详解锁与队列
157 0
【JUC并发编程】 详解锁与队列
|
存储 消息中间件 算法
JUC-阻塞队列
问题引出 一.单端阻塞队列(BlockingQueue) 二.双端阻塞队列(BlockingDeque) 三.延迟队列(DelayQueue)
58 0
|
存储 安全 程序员
Juc04_阻塞队列
Juc04_阻塞队列
127 0
Juc04_阻塞队列
|
安全 Java
2020大厂面试JUC线程重要技术点【集合+线程+阻塞队列+线程池】(上)
2020大厂面试JUC线程重要技术点【集合+线程+阻塞队列+线程池】(上)
126 0
2020大厂面试JUC线程重要技术点【集合+线程+阻塞队列+线程池】(上)
|
Java API
2020大厂面试JUC线程重要技术点【集合+线程+阻塞队列+线程池】(下)
2020大厂面试JUC线程重要技术点【集合+线程+阻塞队列+线程池】(下)
153 0
2020大厂面试JUC线程重要技术点【集合+线程+阻塞队列+线程池】(下)
|
存储 缓存
并发编程之BlockingQueue队列
BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞。被阻塞的情况主要有如下两种:
256 0

热门文章

最新文章