学习集合框架中多线程相关的集合--笔记

PriorityBlockingQueue:

  这是一个无界的阻塞队列,使用和PriorityQueue 一样的排序规则,并且提供阻塞检索元素操作。虽然说这个队列在逻辑上是无界的,但是它可能会因为资源耗尽导致内存溢出错误。这个队列也不允许出现null值元素。一个具有优先级的阻塞队列依赖于Comparable接口的排序规则,而且的存放到队列中的元素必须实现Comparable接口,否则会出现类型转换异常。

  这个类和他的迭代器均实现了Collection和Iterator 接口。迭代器由iterator()方法返回,但是返回的迭代器并不能保证的按指定的顺序遍历元素。如果需要按照指定的顺序遍历元素可以考虑使用Arrays.sort() ,如,将队列转化为数组,然后作为参数传进去获得有序的结果,Arrays.sort(pq.toArray());

  如果不指定初始容量,那么默认初始容量为11. 容量在自动扩容的时候每次都是默认增长50%。

  remainingCapacity(): 方法总是返回Integer.MAX_VALUE.因为一个无界阻塞队列没有容量限制。

  因为这个队列是无界的,当使用offer(E e)方法的时候,这个方法不会返回false.当使用put(E e)方法的时候也不会阻塞。

  removeAt(int i):这个方法可以移除指定位置的元素,但是没有返回值。

  remove(Object o):这个方法可以移除指定元素,成功放回true,否则返回false。如果这个队列中有多个相同的元素,o.equals(e) 返回true则认为是相同,那么它只会删除一个。

  toArray():这个方法将会以数组的形式返回这个队列中的元素的,但是这个数组中的元素并不是有序的。

 ConcurrentLinkedQueue:

  这是一个基于链节点,无界的线程安全的队列。这个队里遵循FIFO原则。这个队列适用于当多个线程需要同时访问一个普通的集合时。像其它并发集合的实现类一样,它也不允许有null值元素。

  注意,这其它集合不一样的是,这队列的size()方法返回的元素个数并不是准确的,比如,这个队列在遍历的时候它的结构被修改了(如添加或移除)。此外,大批量的操作,比如调用addAll、removeAll、retainAll、containsAll、equals、toArray方法,这些方法不能保证被原子性的执行。例如:一个迭代操作和一个addAll()操作并发进行,那么可能只能遍历到部分新添加进来的元素。

  

转载于:https://www.cnblogs.com/GooPolaris/p/8136611.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值