각 작업 후에 일시 중지가 필요한 단일 스레드 프로그램을 작성하고 있습니다. (일시 중지 = 1 ~ 60 초 사이의 임의 값).Thread.sleep (60 * 1000)은 내 프로그램을 30 분 이상 잠자기 상태로 만듭니다.
그래서 이런 쓴 방법 : 프로그램 로그를 통해보고있는 동안
public void freeze() throws InterruptedException {
Thread.sleep(nextFreezeDurationSec * 1000);
calculateNextFreezeDuration();
}
나는 문제를 발견했다.
public void freeze() {
long nextFreezeEnd = System.currentTimeMillis() + (nextFreezeDurationSec * 1000);
while (System.currentTimeMillis() < nextFreezeEnd) {
/*NOR*/
}
calculateNextFreezeDuration();
}
: Аpparently, 나 이유에 대한 몇 가지 알 수없는 위해, 500-700 작업 후에는
(이 시간보다 큰 번) 그리고 나는 다른 방법을 쓴 시간의 훨씬 더 큰 금액을 잠 내 프로그램을두고
이 코드는 정상적으로 작동합니다. 그러나 그것은 CPU를 미친 것처럼 먹습니다.
이 문제에 대한 조언을 보내 주시면 감사하겠습니다.
무엇인가? –
아마도'calculateNextFreezeDuration()'도 포함시킬 수 있을까요? 'nextFreezeDurationSec'의 값을 로깅하여 예상 값인지 확인해 보셨습니까? – turbo
여기 있습니다. 정말 특별한 것은 없습니다. 개인 무효 calculateNextFreezeDuration() { setNextFreezeDurationSec ( random.nextInt (maxLimitSec - minLimitSec) + minLimitSec ); } – nikopol86