을 행동 나는 다음과 같은 코드가 있습니다Thread.sleep를 이상하게
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보다 훨씬 큰 값이 때로는입니다. 어떤 도움이 필요합니까? 감사합니다. .
편집 : 지정된 지연 후 정확하게 스레드 # 수면 중지 보장이 없음을 알고 있습니다. 그러나 추가 1400ms는 긴 지연입니다. 기본적으로 게임 플레이어 에이전트를 구현 중이며 작업을 실행 한 다음 5 초 후에 서버에 값을 반환해야합니다 (그렇지 않으면 서버가 게임을 종료 함). 서버가 java.util.Timer.schedule (TimerTask 태스크, 긴 지연)을 사용 중입니다. 위의 코드에서 this.curT 인 메인 쓰레드에 concurent를 실행하는 쓰레드는 하나 뿐이므로, 실제로는 멀티 쓰레딩을하지 않아도된다. docs.oracle.com에서
프로세서가 다른 작업을 수행하는 중입니까? 프로세서가 많은 쓰레드 동시 작업으로 인해 정말 과언이 아닐 경우 스레드가 잠시 동안 사이클을 얻을 수 없었습니다. – Gray
얼마나 자주 이런 문제가 발생합니까? 다른 코드없이 절전 호출로 스레드를 실행하십시오. –
하나의 스레드에서 Thread.sleep 만 실행하면 올바르게 작동합니다. 하지만 위의 그림과 같이 실제 코드에서 실행되는 스레드는 2 개뿐입니다. – Mouhyi