Странное поведение многопоточности - PullRequest
1 голос
/ 08 июля 2020
• 1000 thread 3 10000000

Этот вывод меня очень сбивает с толку, так как:

  1. Я ожидал, что только 1 поток достигнет этой суммы из-за того, что while l oop необходимо остановить после завершения первого потока и stop = true
  2. Во-вторых, я ожидал, что только thread1 с наивысшим приоритетом достигнет максимальной суммы.

Я был бы очень признателен за любое объяснение, почему это происходит,

Спасибо.

1 Ответ

3 голосов
/ 08 июля 2020

У вас есть приоритеты потоков и все в порядке. Единственная проблема здесь в том, что stop не обязательно имеет одинаковое значение во всех потоках. Каждый поток кэширует свое собственное значение для stop в локальной памяти потока. Когда один поток устанавливает значение stop на true, другие потоки не обязательно «видят» это изменение. Исправить это просто; просто объявите stop как volatile вот так:

private static volatile boolean stop = false;

Это сохраняет переменную в основной памяти, заставляя потоки взаимодействовать друг с другом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...