我有一个用 Java 准备的问题游戏,每个问题都有一个计数器时间。玩家有 10 秒的时间来回答每个问题。为了实现计数器,我创建了一个时钟类,它使用一个命令类调用机器人(游戏实现类),该类发送消息“升级倒计时屏幕”(每个脉冲都可以调用游戏以更新剩余时间的屏幕数据,因此玩家可以看到倒计时 9、8、7 ...)。当时钟结束时,发送一条消息“显示结果并提出新问题”。
private class Clock extends Thread {
CommandMessage endClock = null;
CommandMessage pulseClock = null;
BotTrivial bot;
long seconds = 10L;
long restSeconds = seconds; //To show how many seconds left to end the counter.
boolean isCancelled = false;
@Override
public void run() {
this.setPriority(Thread.MAX_PRIORITY);
try {
int i = 0;
restSeconds = seconds;
//Command for each pulse if available (for example, upgrade screen)
while (i < seconds && !this.isCancelled) {
if (this.pulseClock != null && !this.isCancelled) {
this.bot.executeCommand(pulseClock);
}
TimeUnit.SECONDS.sleep(1);
i++;
restSeconds--;
if (this.isCancelled) {
isCancelled = false;
return;
}
}
//Command to end if available.
if (endClock != null && !this.isCancelled) {
this.bot.executeCommand(endClock);
}
isCancelled = false;
} catch (InterruptedException excp) {
ErrorRegister.addErrorLogAndCommand("Error: " + excp);
}
}
public void cancel() {
this.isCancelled = true;
}
public long getRestSeconds() {
return this.restSeconds;
}
}
问题:有时,时钟“睡”了太多时间,远远超过 1 秒。我可以被阻止 15 秒或更长时间。我设置了最大优先级,结果是一样的。此外,何时会出现大于预期的块是不可预测的。
我怎样才能确保它只阻塞一秒钟?
谢谢你。