我有以下代码:
public Move chooseMove(Board board) {
// start parallel thread
this.tn = new TreeNode(this.myboard, this, null);
tn.stop = false;
this.curT = (new Thread(tn));
this.curT.start();
try {
long startTime = System.currentTimeMillis();
Thread.sleep(4000 );
System.out.println(System.currentTimeMillis() - startTime);
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
tn.stop=true;
return getBestMove();
}
}
输出有时是一个大于 4000 毫秒的值,例如 5400 毫秒,这意味着线程的睡眠时间超出了应有的时间。有什么帮助吗?谢谢。
编辑:我知道在指定的延迟之后不能保证 Thread#sleep 恰好停止。但是,额外的 1400 毫秒是一个很长的延迟。基本上,我正在实现一个游戏玩家代理,我需要一种方法来运行任务,然后在 5 秒后向服务器返回一个值(否则服务器结束游戏)。服务器正在使用 java.util.Timer.schedule(TimerTask task, long delay)。在上面的代码中,只有一个线程与主线程并发运行,即 this.curT,因此并没有真正繁重的多线程。