BlockingQueue一些特性
来源:互联网 发布:网络绘画班哪个好 编辑:程序博客网 时间:2024/06/06 07:11
特性:BlockingQueue为空时,从BlockingQueue取值的操作将会被阻断进入等待状态,直到BlockingQueue中有值才会被唤醒,
BlockingQueue为满时,往BlockingQueue存储的操作也会被阻断进入等待状态,直到BlockingQueue不为满才会被唤醒继续操作。
可以使用此特性对其他线程控制,节约CPU资源。
BlockingQueue有四个具体的实现类,只从名字来看,可以知道各种队列的底层实现:
ArrayBlockingQueue:(数组实现的阻塞队列)
规定大小的BlockingQueue,其构造函数必须带一个int参数来指明其大小。其所含的对象是以FIFO(先入先出)顺序排序的。
LinkedBlockingQueue:(链表实现的阻塞队列)
大小不定的BlockingQueue,若其构造函数带一个规定大小的参数,生成的BlockingQueue有大小限制,若不带大小参数,所生成的BlockingQueue的大小由Integer.MAX_VALUE来决定。其所含的对象是以FIFO顺序排序的。
PriorityBlockingQueue:(按照排序规则进行排序的有序队列)
类似于LinkedBlockingQueue,但其所含对象的排序不是FIFO,而是依据对象的自然排序顺序或者是构造函数所带的
Comparator决定的顺序。
SynchronousQueue:(放和取交替完成)
特殊的BlockingQueue,对其的操作必须是放和取交替完成的。
LinkedBlockingQueue和ArrayBlockingQueue比较起来,它们背后所用的数据结构不一样,导致LinkedBlockingQueue的数据吞吐量要大于ArrayBlockingQueue,但在线程数量很大时其性能的可预见性低于ArrayBlockingQueue。
按数组格式存储的ArrayBlockingQueue要求内存连续,因此能够存储的数据量较小,支持随机访问,因此在多线程访问的时候底层实现不需要按照队列的顺序取值。
按数链表格式存储的LinkedBlockingQueue不要求内存连续,因此能够存储的数据量小,只支持顺序访问,因此在多线程访问的时候底层实现必须按照队列顺序访问线程访。
- BlockingQueue一些特性
- 10____java新特性之队列(blockingQueue)
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- BlockingQueue
- iOS应用开发最佳实践:编写高质量的Objective-C代码
- Dynamics CRM2015 页面导航栏顶部全局快速查找功能配置
- 集合框架---TreeSet存储自定义对象
- Xcode真机测试could not find developer disk image解决方法
- 关于Spring的69个面试问答——终极列表
- BlockingQueue一些特性
- 测试过程之UT-IT-ST的区别
- RAD Studio 10 免费培训之支持 NoSQL 的 MongoDB——讲义及范例程序下载
- Android之Handler:实现计时器实例
- FMDB 缓存
- Mac OS X下面的Minecraft运行
- unity3d关于方法DontDestroyOnLoad的研究
- LinkedHashMap源码分析与LRU实现
- 用PE修复NTLDR is missing