Я новичок в многопоточности, но меня попросили создать игру. Я хочу, чтобы каждый игрок выполнял свой ход одновременно, но не позволял игроку делать 4 хода, тогда как другому игроку - 1 ход.
Мой метод run () в настоящее время выглядит следующим образом:
public synchronized void run(){
while (!gameWon) {
takeTurn();
hasPlayerWon();
playersTurnTaken += 1;
System.out.println(Thread.currentThread().getName() + " has taken their turn");
if (playersTurnTaken != n) {
try {
wait();
} catch (InterruptedException e) {}
} else {
playersTurnTaken = 0;
notifyAll();
}
}
}
Это внутри вложенного класса, называемого игроком, где родительским классом является CradGame, а CardGame содержит атрибут PlayersTurnTaken. Я использую эту переменную, чтобы выяснить, когда каждый игрок сделал свой ход, и он объявлен как переменная переменная (я думаю, именно так вы и должны ее определить).
Вывод программы такой:
Thread-3 has taken their turn
Thread-1 has taken their turn
Thread-2 has taken their turn
Thread-0 has taken their turn
Thread-0 has taken their turn
и тогда я предполагаю, что все потоки ожидают, так как программа не заканчивается.
Почему они не просыпаются после того, как Нить-0 заканчивает свой первый ход? Любая помощь приветствуется.