#java #fork-join #forkjoinpool
#java #fork-join #forkjoinpool
Вопрос:
Я пытаюсь понять, что такое кража части fork-join. Пул fork join имеет рабочие потоки со своим собственным Deque. Рабочий поток крадет у другого рабочего, если его собственный deque пуст.
- Как поток может получить доступ к состоянию какого-либо другого потока?
- Не создаст ли это проблем с синхронизацией, когда поток-владелец и поток-похититель попытаются получить доступ к одному и тому же элементу в очереди удаления?
Ответ №1:
Deque — это java.util.concurrent.ConcurrentLinkedDeque. Поток-владелец добавляется к нижней части deque. Ворующий поток опрашивает верхнюю часть deque:
poll() Извлекает и удаляет заголовок очереди, представленный этим deque (другими словами, первый элемент этого deque), или возвращает null, если это deque пустое.
Следовательно, конфликта нет.