Ответы пользователя по тегу Java
  • Многопоточность не завершается?

    @pbahushevich
    Runnable картины не изменит.
    Во-первых комментарии по коду
    while (ivanov.getCountSpeaches() + petrov.getCountSpeaches() + sidorov.getCountSpeaches() < totalCountSpeeches) {
            }

    тут я так понимаю ты ждешь когда все вместе наберут 200 голосов и после этого цикл прекратится и у тебя будут данные о том кто сколько голосов набрал.
    Проблема в том что конец цикла происходит в потоке main, а остальные потоки никак об этом не знают и продолжат работать. И между окончанием цикла и выводом результатов на экран 3 потока успеют много чего сделать и результаты уже будут сильно отличаться. Ну или не сильно ))) т.е. сумма ровно в 200 не сойдется.
    Проблема еще в том что у тебя зависает еще до выхода из цикла и проблема эта решается в строке
    private int countSounds;
    добавлением волшебного слова volatile.
    почему - см. Java Memory Model либо если не поймешь пиши в комменты ))
    Ответ написан