上一篇讲述了ThreadPoolExecutor的执行过程,我们也能看出来一个很明显的问题:这个线程池的构造函数比较复杂,对于不十分理解其运作原理的程序员,自己构造它可能体现和想象中不一样的行为。比如阻塞队列放什么,corePoolSize怎么设置等等。 所以和Math这种工具类一样,并发包也提供了 ...
分类:
编程语言 时间:
2016-09-06 09:03:53
阅读次数:
146
阻塞栈,与阻塞队列相似。不同点在于栈是“后入先出”的结构,每次操作的是栈顶,而队列是“先进先出”的结构,每次操作的是队列头;Java为阻塞栈定义了接口:java.util.concurrent.BlockingDeque,其实现类也比较多 ...
分类:
编程语言 时间:
2016-09-02 15:58:57
阅读次数:
153
阻塞队列是Java线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素的操作会被阻塞等待,直到有空位为止。同样,当队列为空时候,请求队列元素的操作同样会阻塞等待,直到有可用 ...
分类:
编程语言 时间:
2016-09-02 15:49:39
阅读次数:
166
在前面我们接触的队列都是非阻塞队列,比如PriorityQueue、LinkedList(LinkedList是双向链表,它实现了Dequeue接口)。 使用非阻塞队列的时候有一个很大问题就是:它不会对当前线程产生阻塞,那么在面对类似消费者-生产者的模型时,就必须额外地实现同步策略以及线程间唤醒策略 ...
分类:
编程语言 时间:
2016-08-11 22:17:27
阅读次数:
168
在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列,一个是以BlockingQueue接口为代表的阻塞队列,无论哪种都继承自Queue。 一、ConcurrentLinkedQueue 是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状 ...
分类:
其他好文 时间:
2016-08-07 06:13:47
阅读次数:
186
在Android多线程(一)线程池这篇文章时,当我们要创建ThreadPoolExecutor的时候需要传进来一个类型为BlockingQueue的参数,它就是阻塞队列,在这一篇文章里我们会介绍阻塞队列的定义、种类、实现原理以及应用。...
分类:
编程语言 时间:
2016-07-31 11:46:49
阅读次数:
183
Java并发编程:阻塞队列 在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList),这些工具都为我们编写多线程程序提供了很大的方便。今天我们来讨论另外一类容器:阻塞队列。 在前面我们接 ...
分类:
编程语言 时间:
2016-07-29 17:08:38
阅读次数:
217
有BlockingQueue及其相关的类,跟阻塞队列有关系。 ConcurrentHashMap,ConcurrentLinkedQueue等,这些是相关集合的线程同步版本。 CopyOnWriteArrayList,也是一种并发用的容器,当我们改变这个数组的时候,先复制一个副本,修改这个副本,再复 ...
分类:
编程语言 时间:
2016-07-28 14:21:19
阅读次数:
191
SynchronousQueue是这样一种阻塞队列,其中每个 put 必须等待一个 take,反之亦然。同步队列没有任何内部容量,甚至连一个队列的容量都没有。 不能在同步队列上进行 peek,因为仅在试图要取得元素时,该元素才存在; 除非另一个线程试图移除某个元素,否则也不能(使用任何方法)添加元素 ...
分类:
其他好文 时间:
2016-07-21 15:01:07
阅读次数:
150