Пример пинг-понга
Я пытаюсь понять основы потоков, и в качестве первого примера я создаю два потока, которые записывают 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!