1. SynchronousQueue简介
SynchronousQueue是无界的,是一种无缓冲的阻塞队列,插入操作必须等待令一个线程取数据,反之亦然(SynchronousQueue是线程安全的,是阻塞的)。同步队列没有任何内部容量,甚至连一个队列的容量都没有。
PS:什么是线程安全?
线程安全就是说多线程访问同一代码,不会产生不确定的结果。
声明一个SynchronousQueue有两种不同的方式,它们之间有着不太一样的行为。
公平模式:
SynchronousQueue会采用公平锁,并配合一个FIFO队列来阻塞多余的生产者和消费者,从而体系整体的公平策略;
非公平模式(SynchronousQueue默认):
SynchronousQueue采用非公平锁,同时配合一个LIFO队列来管理多余的生产者和消费者,而后一种模式,如果生产者和消费者的处理速度有差距,则很容易出现饥渴的情况,即可能有某些生产者或者是消费者的数据永远都得不到处理。
注意:
(1)不能在同步队列上进行 peek,因为仅在试图要取得元素时,该元素才存在;
(2)除非另一个线程试图移除某个元素,否则也不能(使用任何方法)添加元素;
(3)不能迭代队列
(4)该队列的头