1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。 ...
分类:
其他好文 时间:
2019-12-10 18:38:55
阅读次数:
96
阻塞队列与普通的队列(LinkedList/ArrayList)相比,支持在向队列中添加元素时,队列的长度已满阻塞当前添加线程,直到队列未满或者等待超时;从队列中获取元素时,队列中元素为空 ,会将获取元素的线程阻塞,直到队列中存在元素 或者等待超时。 在JUC包中常用的阻塞队列包含ArrayBloc ...
分类:
数据库 时间:
2019-12-10 18:33:26
阅读次数:
96
非阻塞队列ConcurrentLinkedQueue我们已经了解过了,既然是Queue,那么是否有其双端队列实现呢?答案是肯定的,今天就继续说一说非阻塞双端队列实现ConcurrentLinkedDeque ...
分类:
其他好文 时间:
2019-12-08 15:15:03
阅读次数:
88
什么是非阻塞算法呢? 在基于锁的算法中可能会发生各种活跃性故障。如果线程在持有锁时由于阻塞IO,内存页缺失或其他延迟而导致推迟执行,那么很可能所有线程都不能继续执行下去。 如果在算法中,一个线程的失败或者挂起不会导致其他线程也失败或挂起,那么这种算法就被称为非阻塞算法。如果在算法的每个步骤中都存在某 ...
分类:
编程语言 时间:
2019-11-26 22:56:31
阅读次数:
103
newFixedThreadPool:固定线程池,核心线程数和最大线程数固定相等,而空闲存活时间为0毫秒,说明此参数也无意义,工作队列为最大为Integer.MAX_VALUE大小的阻塞队列。当执行任务时,如果线程都很忙,就会丢到工作队列等有空闲线程时再执行,队列满就执行默认的拒绝策略 newCac ...
分类:
编程语言 时间:
2019-11-19 15:43:29
阅读次数:
80
在上一篇中, 线程池的取值(二)设计吞吐量 重要, 使用无界的LinkedBlockingQueue来接收等待队列,我们将阻塞队列改为36来看看: ...
分类:
编程语言 时间:
2019-11-17 13:04:18
阅读次数:
116
首先,DelayQueue是一个无界阻塞队列,只有在延迟期满时才能从中提取元素。可以设置该队列的存活时间、移除时间、唯一ID等元素。 DelayQueue阻塞队列在我们系统开发中也常常会用到,例如:延迟多久执行某操作;任务调度系统,能够准确的把握任务的执行时间。为了具有调用行为,存放到DelayDe ...
分类:
其他好文 时间:
2019-11-13 19:21:06
阅读次数:
107
本文基于 "https://github.com/h2pl/Java Tutorial" 的总结 ReentrantReadWriteLock(读写锁)源码分析 "BlockingQueu 阻塞队列" ArrayBlockingQueue(数组。有界) LinkedBlockingQueue(链表。 ...
分类:
编程语言 时间:
2019-11-10 14:00:04
阅读次数:
89
阻塞队列的实现前面已经讲解完毕,今天我们继续了解源码中非阻塞队列的实现,接下来就看一看ConcurrentLinkedQueue非阻塞队列是怎么完成操作的 ...
分类:
其他好文 时间:
2019-11-09 19:36:37
阅读次数:
99
阻塞队列与普通队列的不同在于。当队列是空的时候,从队列中获取元素的操作将会被阻塞,或者当队列满时,往队列里面添加元素将会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得 ...
分类:
编程语言 时间:
2019-11-08 10:48:25
阅读次数:
88