美文网首页
图解Exchanger

图解Exchanger

作者: 程序员札记 | 来源:发表于2022-04-18 18:06 被阅读0次

这个Exchanger 的文章发出去后,有些同事们还是说看不懂。那我就继续图解系列。我们分不同的情况来介绍代码。

初始阶段

image.png

此时slot 为null

第一个线程到来

image.png
  1. 把自己threadlocal 的节点 设置成 slot,设置数据
  2. 把自己阻塞

第二个线程到来

image.png
  1. 发现slot 不为null ,改为null,同时交换数据,slot为thread-1 的node reference ,因此thread1 可以获得数据
  2. thread 1 unpark, 一个配对完成

第三个线程到来

thread 和thread 2 正在交换中


image.png
  1. 尝试设置slot 为null, 此时thread 2 正在操作, 失败
  2. 创建arena 数组

进入到arenaExchange,此时有两种情况

情况1

thread 1, 2, 已经释放, 第四个线程到来

image.png

thread 4 进行了park ,thread 3 可以匹配 thread4 在slotExchange 方法中

则直接返回V.

情况2

thread 1, 2, 没有释放,还在交换。

image.png

thread3占据arena 数组第1 个,并进行park

此时 来了thread 4

thread 1, 2, 没有释放,还在交换。 thread 3 park

image.png

thread 4 找到第一个arena 的thread3, 交换数据,thread 3 unpark.

此时 来了thread 5

thread 1, 2, 没有释放,还在交换。 thread 3, 4 还在交换,


image.png

thread 5 循环尝试更改第一个node(thread3),如果成功就说明可以配对,配对返回。 如果失败走下面。

此时 来了thread 5

thread 修改 第一个node (thread3) 失败,就找到下一个arena array, 设置节点为自己,进行park


image.png

依次类推,如果越界,增加一个容量。

总结

上面只是用图示的方式来表达这个流程。所以新的线程都依次走过的逻辑,符合哪条走哪条。

相关文章

  • 图解Exchanger

    这个Exchanger 的文章发出去后,有些同事们还是说看不懂。那我就继续图解系列。我们分不同的情况来介绍代码。 ...

  • Java/Android Exchanger 必知必会

    问:你知道 Java 的 Exchanger 吗?简单说说其特点及应用场景? 答:Exchanger 是 JDK ...

  • java.util.concurrent 交换机 Exchang

    交换机 Exchanger java.util.concurrent.Exchanger 类表示一种两个线程可以进...

  • Exchanger的使用

    1 Exchanger使用案例 结果

  • Exchanger

    java.util.concurrent.Exchanger 是用来支持两个线程之间交换数据,不支持更多线程。cl...

  • Exchanger

    示例 Participant Node slotExchange arenaExchange

  • Exchanger

    Exchanger用于两个线程间交换数据。说起来这个和前面讲过的SynchronousQueue[https://...

  • Exchanger

    用于两个线程之间进行交换数据。线程A执行到exchange(s)其阻塞住,并且把数据放置于格子1处;线程B执行到e...

  • Exchanger

    JUC 包中除了 CountDownLatch, CyclicBarrier, Semaphore, 还有一个重要...

  • 19.Exchanger

    Exchanger用于线程之间交换数据。 Exchanger的核心机制和Lock一样,也是CAS+park/unp...

网友评论

      本文标题:图解Exchanger

      本文链接:https://www.haomeiwen.com/subject/gkwdertx.html