zoukankan      html  css  js  c++  java
  • 学习集合框架中多线程相关的集合--笔记

    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()操作并发进行,那么可能只能遍历到部分新添加进来的元素。

      

  • 相关阅读:
    骆驼命名法,帕斯卡命名法和匈牙利命名法<转>
    海量数据库查询优化<转>
    备份数据库并生成Rar
    标准http状态码[英文注释版本]<转>
    IIS自动停止,iis自动关闭。应用程序池假死、自动重启以及iis权限等解决办法 <转>
    Flex/Silverlight的技术比较<转>
    .NET平台测试驱动开发模拟框架Moq简明教程(实例剖析)<转>
    VisualStudio用IE8调试时遇到的问题(转)
    English learning
    JS调用WebService示例
  • 原文地址:https://www.cnblogs.com/GooPolaris/p/8136611.html
Copyright © 2011-2022 走看看