У меня есть следующий код:
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, большая задержка). Существует только один поток, работающий одновременно с основным потоком, который является this.curT в приведенном выше коде, поэтому многопоточность не очень тяжелая.