我有一台服务器,其中有多个客户端连接。每个连接都会产生一个新的线程,然后它会独立运行。
我现在面临制作大厅的任务,可以创建多个WaitingRooms。 2分钟后,WaitingRoom将为列表中注册的玩家开始游戏。
问题在于:我怎样才能拥有定时线程?我在想这些解决方案:
我也将这个时钟用于PlayerTurns和Connections。
我不想重新发明时钟,我确信我不是第一个做这样事情的人:有标准的方法吗?
答案 0 :(得分:1)
我会使用java.util.Timer
和java.util.TimerTask
。这样你就不必创建自己的计时线程了。
答案 1 :(得分:1)
创建一个后台Thread
并在该线程上使用Thread.sleep()
等待两分钟。 (注意thread.sleep()
需要毫秒)
(我假设这是与玩家的游戏)
示例(假设您有一个玩家加入的方法):
public void onPlayerJoin() {
waitForPlayers();
}
boolean isWaiting = false;
public void waitForPlayers() {
if (!isWaiting) {
isWaiting = true;
new Thread("background").sleep(millis);
// Now that we have waited, start the game
isWaiting = false;
game.start();
}
}
玩家加入时会调用此方法。如果它已经在等待,它什么都不做。但是,如果它没有等待,它会创建一个线程,使其休眠2分钟,然后继续开始游戏。
修改强>
此外,如果你想在开始游戏之前关闭玩家线程(或任何地方(如果玩家线程在ArrayList中)
for (Player p : Players) {
try { p.join(); } catch (InterruptedException e) { e.printStackTrace(); }
}