简单总结SynchronousQueue 的特点

本文详细介绍了SynchronousQueue的特性,包括其工作原理、队列类型及操作行为,并对比了它与LinkedBlockingQueue的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单总结SynchronousQueue 的特点:
1. queue有三种类型: 空类型,take以及put类型,


分别说明:

1.空类型时, take和put都会被阻塞, 非阻塞offer和poll都不会阻塞. 无法成功操作。
2. 队列是某种类型时,同类型操作: 分两种: 1.阻塞method会阻塞,加入阻塞队列中 2.非阻塞method操作失败 。非同类型: 不管阻塞不阻塞method都成功。


具体说来:

1.队列是take类型时:同类型操作:阻塞take操作会阻塞,非阻塞 poll()失败,非同类型: 异类的put和offer能够成功。

2. 队列是put类型:同类型操作:阻塞put操作会被阻塞,非阻塞offer操作失败。非同类型: 异类的take,poll会成功


关于队列长度,界:

一个线程阻塞队列要么全是take线程,要么全是put线程. 后来的互补的操作将会匹配对头的线程.使退出队列.
1. 里面没有任何数据.调用offer()无法成功,返回flase,表示填充失败.不会被阻塞。
2. 先take,被阻塞,直到有一个线程来offer. 两个不同的互补碰撞发生匹配完成(fullfill). 之前的take的线程被唤醒获得offer的提供的数据。
 
再来解析SynchronousQueue 源代码,
SynchronousQueue 源代码注释中关键术语解析:
Node类型: 一共分层两种. 一种是 isDate=true. (对应offer , put 函数) 一种是isDate=false (对应 take函数)
dual queue:dual的含义就好理解了,因为只有两类,可以当isDate=true和isDate=false遇到时会匹配.可翻译为成双的,对偶的. 对偶队列.
same mode: 相同的模式(isDate都=true,或者isDate都=false).比如take产生的Node和前面已经放入到队列中的take动作Node就属于同一个模式
complementary :互补的.比如先take,放到队列中.后面来一个offer动作就是complementary (互补).反之亦然.
fulfill: 字面英文翻译,完成.具体到算法里的含义是一个动作和之前的complementary(译为互补)的动作得到匹配.

LinkedBlockingQueue 先put,再take 和 SynchronousQueue 先put,再take有何区别? 前者可以先放在数据队列上.后者没有地方来接受他的数据,必须等待到有一个take线程产生的数据节点来接受数据.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值