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

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

PING PING pong pong pong PING PING PING pong pong

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

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();
    }
}

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

PING PING pong pong pong PING PING PING pong pong

Can someone explains what I am missing, and Why I'm not getting Ping pong... ping pong. Thanks!

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

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