Ребят, вообще не дооняю, как этот код выполнятеся( Когда мы пишем
public static int totalSpeechCount = 200;
    public static int utterancesPerSpeech = 1000000;

Politician ivanov = new Politician("Иванов");
        ivanov.join();
То выполняется весь класс
public static class Politician extends Thread {
        private volatile int utteranceCount;

        public Politician(String name) {
            super(name);
            start();
        }

        public void run() {
            while (utteranceCount < totalSpeechCount * utterancesPerSpeech) {
                utteranceCount++;
            }
        }

        public int getSpeechCount() {
            return utteranceCount / utterancesPerSpeech;
        }

        @Override
        public String toString() {
            return String.format("%s сказал речь %d раз", getName(), getSpeechCount());
        }
    }
Или только метод run?
public static int totalSpeechCount = 200;
    public static int utterancesPerSpeech = 1000000;
И 2 й вопрос. Ни как не могу понять, метод run. В нём переменная будет равна utteranceCount = 200_000_000, а когда запускаю debag, то когда доходит то строки
ivanov.join();
Она каким то чудом становится равной 200, но как? Был бы благодарен каждому, кто поможет в решении данного вопроса)