一个无界的阻塞队列,它使用与类PriorityQueue相同的顺序规则,并且提供了阻塞检索的操作。
虽然此队列逻辑上是无界的,但是由于资源被耗尽,所以试图执行添加操作可能会失败 (导致 OutOfMemoryError)。
此类不允许使用 null 元素。依赖自然顺序的优先级队列也不允许插入不可比较的对象(因为这样做会抛出 ClassCastException)。
注意1:它是无界阻塞队列,容量是无限的,它使用与类PriorityQueue相同的顺序规则。
注意2:它是线程安全的,是阻塞的
注意3:不允许使用 null 元素。
注意4:对于put(E o)和offer(E o, long timeout, TimeUnit unit),由于该队列是无界的,所以此方法永远不会阻塞。
因此参数timeout和unit没意义,会被忽略掉。
注意5:iterator() 方法中所提供的迭代器并不保证以特定的顺序遍历 PriorityBlockingQueue 的元素。如果需要有序地遍历,则应考虑使用 Arrays.sort(pq.toArray())。
注意6:关于PriorityBlockingQueue的排序原理请参照《PriorityQueue》
至于使用和别的BlockingQueue(ArrayBlockingQueue,LinkedBlockingQueue)相似,可以参照它们。
注意7:此类及其迭代器实现了 Collection 和 Iterator 接口的所有可选 方法。关于PriorityBlockingQueue的使用请参考《ArrayBlockingQueue》和《BlockingQueue》
虽然此队列逻辑上是无界的,但是由于资源被耗尽,所以试图执行添加操作可能会失败 (导致 OutOfMemoryError)。
此类不允许使用 null 元素。依赖自然顺序的优先级队列也不允许插入不可比较的对象(因为这样做会抛出 ClassCastException)。
注意1:它是无界阻塞队列,容量是无限的,它使用与类PriorityQueue相同的顺序规则。
注意2:它是线程安全的,是阻塞的
注意3:不允许使用 null 元素。
注意4:对于put(E o)和offer(E o, long timeout, TimeUnit unit),由于该队列是无界的,所以此方法永远不会阻塞。
因此参数timeout和unit没意义,会被忽略掉。
注意5:iterator() 方法中所提供的迭代器并不保证以特定的顺序遍历 PriorityBlockingQueue 的元素。如果需要有序地遍历,则应考虑使用 Arrays.sort(pq.toArray())。
注意6:关于PriorityBlockingQueue的排序原理请参照《PriorityQueue》
至于使用和别的BlockingQueue(ArrayBlockingQueue,LinkedBlockingQueue)相似,可以参照它们。
注意7:此类及其迭代器实现了 Collection 和 Iterator 接口的所有可选 方法。关于PriorityBlockingQueue的使用请参考《ArrayBlockingQueue》和《BlockingQueue》