Пример пинг-понга
Я пытаюсь понять основы потоков, и в качестве первого примера я создаю два потока, которые пишут 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();
}
}
Я синхронизировалповорот менеджера но я все еще получаю что-то вроде:
Пинг пинг понг понг пинг пинг понг понг
Может кто-нибудь объяснить, что мне не хватает, и почему яя не получаю пинг-понг ... пинг-понг, Спасибо!