SynchronousQueue队列TransferStack源码transfer方法图解

一. 个人看源码过程遇到的问题:
      不理解head节点是FULFILLING状态时,’‘帮助匹配’’ 是怎样作用于正在匹配的两个节点的?
       :帮助匹配成功后,会修改match属性指向匹配成功的节点,所以当FULFILLING节点执行tryMatch时, match == s 为true,

二.SynchronousQueue
      SynchronousQueue内部使用Transferer来交换元素,分为公平模式和非公平模式:公平模式使用队列,非公平模式使用栈;

public SynchronousQueue(boolean fair) {
    // 如果是公平模式就使用队列,如果是非公平模式就使用栈
    transferer = fair ? new TransferQueue<E>() : new TransferStack<E>();
}

三.transfer(E e, boolean timed, long nanos)方法
Transferer的transfer()方法进行匹配交换数据,
     (1) 传入元素e,是生产者(put方法),
     (2) 传入null,是消费者(take方法)。

源码可自行查看,这里用图片展示其transfer()执行流程
在这里插入图片描述

有不足之处欢迎指正!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值