Пример пинг-понга

Я пытаюсь понять основы потоков, и в качестве первого примера я создаю два потока, которые пишут String на стандартный вывод. Как я знаю, планировщик позволяет выполнять потоки, используя график циклического перебора. Вот почему я получил:

Пинг пинг понг понг пинг пинг понг понг

Теперь я хочу использовать разделяемую переменную, чтобы каждый поток знал, настал ли ваш черед:

public class PingPongThread extends Thread {
private String msg;
private static String turn;

public PingPongThread(String msg){
    this.msg = msg;
}
@Override
public void run() {
    while(true) {
        playTurn();
    }

}
public synchronized void playTurn(){
    if (!msg.equals(turn)){
        turn=msg;
        System.out.println(msg);
    }
}
}

Основной класс:

public class ThreadTest {
    public static void main(String[] args) {
        PingPongThread thread1 = new PingPongThread("PING");
        PingPongThread thread2 = new PingPongThread("pong");
        thread1.start();
        thread2.start();
    }
}

Я синхронизировалповорот менеджера но я все еще получаю что-то вроде:

Пинг пинг понг понг пинг пинг понг понг

Может кто-нибудь объяснить, что мне не хватает, и почему яя не получаю пинг-понг ... пинг-понг, Спасибо!

Ответы на вопрос(6)

Ваш ответ на вопрос