![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
消息队列
··老当益壮··
打通任督二脉,去开辟新世界。
展开
-
LinkedTransferQueue 应用详解
多个线程间的通信数据传递,线程是安全的实现了线程间的数据交换take() 从队列中获取数据,如果没有数据阻塞,获取队列中第一个元素put() 向队列中添加数据(队列尾部),加锁,线程安全的public static void main(String[] args) throws InterruptedException { BlockingQueue q = new LinkedTransferQueue(); for (int i = 0; i < 10; i++) { .原创 2020-07-23 15:57:38 · 819 阅读 · 1 评论 -
LinkedBlockingDeque 底层原理和应用详解
LinkedBlockingDeque 是线程安全的,支持多线程,可以指定容器的大小put() : 把元素放入到队列的结尾,如果容器满了就会阻塞add(): 调用的offer方法向队列尾部添加元素,如果容器满了,再添加就会抛异常,暂时没找到他返回false的情况offer():向队列尾部添加元素,如果容器满了,有一个返回值falsetake(): 取出队列中头部的元素,同时从队列中移除,FIFO,下一个元素移动到头部成为first,如果没有数据,阻塞poll(): 取出队列头部的元素并移除.原创 2020-07-23 14:42:38 · 485 阅读 · 0 评论 -
DelayQueue 底层原理和应用详解
线程安全的、无界(写不阻塞)、阻塞、延迟队列(源码)线程安全的(使用ReentrantLock)无界: // 添加元素的方法 public boolean offer(E e) { final ReentrantLock lock = this.lock; lock.lock(); try { q.offer(e); if (q.peek() == e) { leader.原创 2020-07-23 14:38:06 · 389 阅读 · 0 评论 -
PriorityBlockingQueue 底层原理和应用详解
优先级队列,线程安全(添加、读取都进行了加锁)、无界、读阻塞的队列,底层采用的堆结构实现(二叉树),默认是小根堆,最小的或者最大的元素会一直置顶,每次获取都取最顶端的数据(源码)无界,offer或者put 添加元素时,如果容器满了会尝试tryGrow扩容 public void put(E e) { offer(e); // never need to block } public boolean offer(E e) { if (e == null) .原创 2020-07-23 14:20:48 · 319 阅读 · 0 评论