E
- 此集合中保存的元素的类型
public class SynchronousQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
peek
在同步队列,因为一个元素,当您尝试删除它才存在;
您无法插入元素(使用任何方法),除非另有线程正在尝试删除它;
你不能迭代,因为没有什么可以迭代。
队列的头部是第一个排队的插入线程尝试添加到队列中的元素;
如果没有这样排队的线程,那么没有元素可用于删除,并且poll()
将返回null
。
为了其他Collection
方法(例如contains
)的目的, SynchronousQueue
充当空集合。
此队列不允许null
元素。
同步队列类似于CSP和Ada中使用的会合通道。 它们非常适用于切换设计,其中运行在一个线程中的对象必须与在另一个线程中运行的对象同步,以便交付一些信息,事件或任务。
此类支持可选的公平策略,用于订购等待的生产者和消费者线程。 默认情况下,此订单不能保证。 然而,以公平设置为true
的队列以FIFO顺序授予线程访问权限。
该类及其迭代器实现Collection
和Iterator
接口的所有可选方法。
Constructor and Description |
---|
SynchronousQueue()
创建一个
SynchronousQueue 与非访问策略。
|
SynchronousQueue(boolean fair)
创建一个
SynchronousQueue 与指定的公平政策。
|
Modifier and Type | Method and Description |
---|---|
void |
clear()
什么也没做。
|
boolean |
contains(Object o)
始终返回
false 。
|
boolean |
containsAll(Collection<?> c)
返回
false ,除非给定的集合为空。
|
int |
drainTo(Collection<? super E> c)
从该队列中删除所有可用的元素,并将它们添加到给定的集合中。
|
int |
drainTo(Collection<? super E> c, int maxElements)
最多从该队列中删除给定数量的可用元素,并将它们添加到给定的集合中。
|
boolean |
isEmpty()
始终返回
true 。
|
Iterator<E> |
iterator()
返回一个空的迭代器,其中
hasNext 总是返回
false 。
|
boolean |
offer(E e)
如果另一个线程正在等待接收,则将指定的元素插入到此队列中。
|
boolean |
offer(E e, long timeout, TimeUnit unit)
将指定的元素插入到此队列中,如果需要,等待另一个线程接收到的指定等待时间。
|
E |
peek()
始终返回
null 。
|
E |
poll()
如果另一个线程正在使一个元素可用,则检索并删除此队列的头。
|
E |
poll(long timeout, TimeUnit unit)
检索并删除此队列的头,如果需要等待指定的等待时间,另一个线程插入它。
|
void |
put(E e)
将指定的元素添加到此队列,等待另一个线程接收它。
|
int |
remainingCapacity()
始终返回零。
|
boolean |
remove(Object o)
总是返回
false 。
|
boolean |
removeAll(Collection<?> c)
总是返回
false 。
|
boolean |
retainAll(Collection<?> c)
总是返回
false 。
|
int |
size()
始终返回零。
|
Spliterator<E> |
spliterator()
返回一个空的拼写器,其中对
Spliterator.trySplit() 的调用总是返回
null 。
|
E |
take()
检索并删除此队列的头,等待另一个线程插入它。
|
Object[] |
toArray()
返回零长度数组。
|
<T> T[] |
toArray(T[] a)
将指定数组的零元素设置为
null (如果数组的长度不为零)并返回。
|
add, addAll, element, remove
toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
add
addAll, equals, hashCode, parallelStream, removeIf, stream
public SynchronousQueue()
SynchronousQueue
与非访问策略。
public SynchronousQueue(boolean fair)
SynchronousQueue
公平政策的SynchronousQueue。
fair
- 如果是真的,等待线程在FIFO顺序中进行访问;
否则订单是未指定的。
public void put(E e) throws InterruptedException
put
在界面
BlockingQueue<E>
e
- 要添加的元素
InterruptedException
- 如果在等待时中断
NullPointerException
- 如果指定的元素为空
public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
offer
在界面
BlockingQueue<E>
e
- 要添加的元素
timeout
- 放弃等待多久,以
unit
为单位
unit
- a
TimeUnit
确定如何解释
timeout
参数
true
如果成功,或
false
如果在消费者出现之前经过了指定的等待时间
InterruptedException
- 如果在等待时中断
NullPointerException
- 如果指定的元素为空
public boolean offer(E e)
offer
在界面
BlockingQueue<E>
offer
在接口
Queue<E>
e
- 要添加的元素
true
如果元素被添加到这个队列,否则
false
NullPointerException
- 如果指定的元素为空
public E take() throws InterruptedException
take
在接口
BlockingQueue<E>
InterruptedException
- 如果在等待时中断
public E poll(long timeout, TimeUnit unit) throws InterruptedException
poll
在界面
BlockingQueue<E>
timeout
- 放弃之前等待多久,以
unit
为单位
unit
- a
TimeUnit
确定如何解释
timeout
参数
null
如果指定的等待时间在元素存在之前经过
InterruptedException
- 如果在等待时中断
public E poll()
public boolean isEmpty()
true
。
A SynchronousQueue
没有内部容量。
isEmpty
在界面
Collection<E>
isEmpty
在类别
AbstractCollection<E>
true
public int size()
SynchronousQueue
没有内部容量。
size
在界面
Collection<E>
size
在类别
AbstractCollection<E>
public int remainingCapacity()
SynchronousQueue
没有内部容量。
remainingCapacity
在界面
BlockingQueue<E>
public void clear()
SynchronousQueue
没有内部容量。
clear
在界面
Collection<E>
clear
在类别
AbstractQueue<E>
public boolean contains(Object o)
false
。
A SynchronousQueue
没有内部容量。
contains
在界面
Collection<E>
contains
在界面
BlockingQueue<E>
contains
在类别
AbstractCollection<E>
o
- 元素
false
public boolean remove(Object o)
false
。
A SynchronousQueue
没有内部容量。
remove
在界面
Collection<E>
remove
在界面
BlockingQueue<E>
remove
在类别
AbstractCollection<E>
o
- 要删除的元素
false
public boolean containsAll(Collection<?> c)
false
,除非给定的集合为空。
A SynchronousQueue
没有内部容量。
containsAll
在界面
Collection<E>
containsAll
在类别
AbstractCollection<E>
c
- 集合
false
除非给定的集合是空的
AbstractCollection.contains(Object)
public boolean removeAll(Collection<?> c)
false
。
A SynchronousQueue
没有内部容量。
removeAll
在界面
Collection<E>
removeAll
在类别
AbstractCollection<E>
c
- 集合
false
AbstractCollection.remove(Object)
,
AbstractCollection.contains(Object)
public boolean retainAll(Collection<?> c)
false
。
A SynchronousQueue
没有内部容量。
retainAll
在界面
Collection<E>
retainAll
在类别
AbstractCollection<E>
c
- 集合
false
AbstractCollection.remove(Object)
,
AbstractCollection.contains(Object)
public E peek()
null
。
A SynchronousQueue
除非积极地等待,否则不返回元素。
public Iterator<E> iterator()
hasNext
总是返回
false
。
iterator
在界面
Iterable<E>
iterator
在界面
Collection<E>
iterator
在类别
AbstractCollection<E>
public Spliterator<E> spliterator()
Spliterator.trySplit()
的调用总是返回
null
。
spliterator
在界面
Iterable<E>
spliterator
在界面
Collection<E>
public Object[] toArray()
toArray
在界面
Collection<E>
toArray
在类别
AbstractCollection<E>
public <T> T[] toArray(T[] a)
null
(如果数组具有非零长度)并返回。
toArray
在界面
Collection<E>
toArray
在类别
AbstractCollection<E>
T
- 包含集合的数组的运行时类型
a
- 数组
NullPointerException
- 如果指定的数组为空
public int drainTo(Collection<? super E> c)
BlockingQueue
复制
c
添加元素时遇到的c
可能导致元素在抛出关联的异常时既不在两个集合中,也可能不是两个集合。
尝试将队列排入自身会导致IllegalArgumentException
。
此外,如果在操作进行中修改了指定的集合,则此操作的行为是未定义的。
drainTo
在界面
BlockingQueue<E>
c
- 将元素传输到的集合
UnsupportedOperationException
- 如果指定集合不支持添加元素
ClassCastException
- 如果此队列的元素的类阻止将其添加到指定的集合
NullPointerException
- 如果指定的集合为空
IllegalArgumentException
- 如果指定的集合是此队列,或此队列的某个元素的某些属性阻止将其添加到指定的集合
public int drainTo(Collection<? super E> c, int maxElements)
BlockingQueue
复制
c
添加元素时遇到的c
可能会导致在抛出关联的异常时,元素既不在两个集合中,也可能是两个集合。
尝试将队列排入自身会导致IllegalArgumentException
。
此外,如果在操作进行中修改了指定的集合,则此操作的行为是未定义的。
drainTo
在界面
BlockingQueue<E>
c
- 传送元素的集合
maxElements
- 要传输的元素的最大数量
UnsupportedOperationException
- 如果指定集合不支持元素的添加
ClassCastException
- 如果此队列的元素的类阻止将其添加到指定的集合
NullPointerException
- 如果指定的集合为空
IllegalArgumentException
- if the specified collection is this queue, or some property of an element of this queue prevents it from being added to the specified collection
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.