Java中的阻塞队列(2)
6、同步队列SynchronousQueue
同步队列是一个不存储元素的阻塞队列,每一个put操作必须等待一个take操作,否则就不能继续添加元素。这种场景下可用于多个线程之间的通讯,a线程可以把需要传递的数据放到同步队列中,b线程消费队列中的数据,因为本身不存储元素,所以SynchronousQueue的吞吐量高于ArrayBlockingQueue和LinkedBlockingQueue
首先看一下结构,从结构上跟别的队列并没有什么太大的区别,所以区别就要看里面的源码了
SynchronousQueue队列分为两种模式默认采取的非公平锁,SynchronousQueue不存储元素,所以会有很多的生产者和消费者阻塞,对于这些阻塞的线程,非公平锁中存入了一个LIFO队列中,其实就是把线程放入队列,而不是数据
当SynchronousQueue构造函数中入口参数改为true,此时队列采取公平锁,阻塞的线程存入一个FIFO队列中
此处具一个例子
7、LinkedBlockingDeque链表双向阻塞队列
由链表结构组成的双向阻塞队列,双向队列指的是可以从队列的两端插入和移出元素
8、链表传输队列LinkedTransferQueue
这个需要重点说一下,首先看一下类组成结构如图8-1
此处我们单独拿出TransferQueue接口所扩展的方法来看这个传输队列的作用,如图8-2
我们可以看到TransferQueue接口扩展的几个方法:
1、transfer(E e) :如果目前有消费者阻塞,则直接移交消费者,如果没有,放到队列尾部且生产者进入阻塞,直到数据被消费
2、tryTransfer(E e):如果目前有消费者阻塞,则直接移交消费者,如果没有,直接返回false,而且数据不进入队列,这个操作不会阻塞线程
3、tryTransfer(E e,long timeOut,TimeUnit unit):如果目前有消费者阻塞,则直接移交消费者,如果没有,放到队列尾部且生产者进入阻塞,等到消费者来消费,如果指定时间中无法被消费者获取,则直接返回false,同时元素被移除
4、hasWaitingConsumer():判断有没有等待的消费者
5、getWaitingConsumerCount():获取目前存在的消费者的数量
知道了这些,基本就能大概了解到这个实现TransferQueue接口的类大多能做什么了,接下来直接上一个简单的应用
如图8-3
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
小计最近踏的微信小程序的坑
最近做小程序,实在不想做。然后来吐槽下小程序的坑吧。也只做了这一个项目,有不对的地方请指正见谅。 一、tabbarapp.json里配置tabbar是原生层的,所以要实现比价奇怪的tabbar只有自己用view写了,比如:这样选中的按钮图标都超出了tabbar 的高度,只有的就自己定义一个组件吧 <template name="tabbar"> <view class="tabbar_box"> <block wx:for="{{tabbar.list}}" wx:for-item="item" wx:key="index"> <!-- 选中 --> <navigator class="tabbar_nav" url="{{item.pagePath}}" style="color:{{tabbar.selectedColor}}" open-type="switchTab" wx:if="{{item.selected}}"> <image class="tabbar_icon_on" src="{{item.sele...
- 下一篇
你会教自己的孩子编程吗?
很多家长都想让孩子学编程。科技行业领导者和教育学家呼吁学校开设更多的计算机课程,家长也认为编程是未来社会的必备技能。 为什么要学编程?为了让计算机解决特定的问题,我们把指挥计算机工作的指令写在程序中,当计算机执行程序时,即可按照这些指令完成工作。编程基本上是一种问题求解活动。在问题求解活动中,孩子需要了解问题、分析问题、思考解题方法(或规划解题步骤)、将解题方法付诸实施(执行解题步骤)、评估解题成效。这一系列活动都是高层次思考活动,通过编程,可以体验、学习这些高层次思考技能。 编程也是一种逻辑思考活动。编程过程中,孩子需要分析相关事物间的因果关系,根据给定条件或情况推论可能的结果;程序如果无法正确执行,还需要抽丝剥茧回溯解题方法,分析问题之所在。学习编程有助于逻辑思考能力的训练。 今天小编带来了适合给孩子看的编程书籍。今天还可以享受六折优惠! 少儿学编程篇 《Scratch 2.0少儿游戏趣味编程》 李强 李若瑜著 点此链接购买纸书 本书适合6-12岁的儿童和青少年自学,也适合家长作为亲子阅读教程。 本书通过精心选取的、不同难度级别的14款趣味游戏的开发过程,超值配送280...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- Mario游戏-低调大师作品
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装