我目前正致力于一个使用线程作为玩家并且可以创建n个玩家的多线程游戏,因此同步必须非常好。我的玩家在他们的手牌总和不等于100时执行功能。如果是线程更改变量game on
为假,则停止游戏。
public void run(){
while(gameOn) {
takeHand();
while (sum() != 100 && !isInterrupted()) {
discardPebble();
drawnPebble();
System.out.println(sum() + " "+ hand.toString() + currentThread().getName());
try {
Thread.sleep(100);
} catch (InterruptedException b) {
System.out.println("We have a winner!");
}
}
StopGame();
}
b.close(); // closing output stream to the file
正如您所看到的,每个线程都会执行discardPebble()和drawnPebble(),但它们不会同步。它们也会在不同的时间启动,因此第一个线程执行run()而另一个Thread尚未启动。我如何让它们同时启动并等待所有线程完成discardPebble()和drawnPebble()然后重新开始?我昨天读过有关CountDownLatches的内容,但我并不了解如何在我的情况下使用它们,但我相信它可以解决我的问题。