次のコードがあります。
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();
}
}
出力は、5400ms のように 4000ms をはるかに超える値になることがあります。これは、スレッドが必要以上にスリープしていることを意味します。何か助けはありますか?ありがとう。
編集:指定された遅延の後に Thread#sleep が正確に停止するという保証はないことを理解しています。ただし、追加の 1400 ミリ秒は長い遅延です。基本的に、私はゲーム プレイヤー エージェントを実装しています。タスクを実行し、5 秒後にサーバーに値を返す方法が必要です (または、サーバーがゲームを終了します)。サーバーは java.util.Timer.schedule(TimerTask タスク、長い遅延) を使用しています。上記のコードでは、メイン スレッドと並行して実行されているスレッドは 1 つだけです。これは this.curT です。