Как рабочий поток «ворует» из другого рабочего потока? - PullRequest
2 голосов
/ 23 апреля 2019

Я пытаюсь разобраться в краже части форк-соединения. В пуле объединения вилок есть рабочие потоки со своим собственным Deque. Рабочий поток ворует у другого рабочего, если его собственная очередь пуста.

  1. Как поток может получить доступ к состоянию другого потока?
  2. Не создаст ли это проблемы синхронизации, когда поток владельца и поток кражи попытаются получить доступ к одному и тому же элементу в очереди?

1 Ответ

0 голосов
/ 23 апреля 2019

Deque - это java.util.concurrent.ConcurrentLinkedDeque. Владение потоком добавляет к нижней части deque. Похищенная нить опрашивает верх дека:

poll () Получает и удаляет заголовок очереди, представленной этим deque (другими словами, первый элемент этой deque) или возвращает null, если эта дека пуста.

Следовательно, конфликта нет.

...