工作线程如何从另一个工作线程“窃取”?

问题描述 投票:2回答:1

我试图理解fork-join的窃取部分。 fork连接池具有自己的Deque工作线程。如果其自己的双端队列为空,则工作线程会从另一个工作者窃取。

  1. 线程如何访问其他线程的状态?
  2. 当所有者线程和窃取者线程试图访问出队中的同一项时,是否会产生同步问题?
java fork-join forkjoinpool
1个回答
0
投票

deque是java.util.concurrent.ConcurrentLinkedDeque。拥有线程增加了双端队列的底部。窃取线程轮询了双端队列的顶部:

poll()获取并移除此双端队列表示的队列头部(换句话说,此双端队列的第一个元素),如果此双端队列为空,则返回null。

因此,没有冲突。

© www.soinside.com 2019 - 2024. All rights reserved.