2011-01-20 3 views
1

Java 스레드를 Runnable 상태로 오랜 시간 동안 (예 : 1 시간) 가져야하는 CPU 사용량이 적은 좋은 방법이 있습니까?자바 스레드 확장 실행 가능 상태

편집 : 버그를 재현하려고합니다. 나는 데이터베이스 연결이 일정 시간이 지나면 재설정 될 것이라고 의심하지만 스레드 수면은 그것을하지 않았다. 다른 가능한 근본 원인으로 이동하기 전에 실행 가능한 상태의 스레드가 연결을 재설정하지 않도록하고 싶습니다.

편집 : 큰 뚱뚱한 해킹처럼 보이는 해결 방법을 발견했습니다. 다른 사람들에게 도움이된다면 내 자신의 질문에 답을 게시하십시오.

+1

Thread.sleep()의 문제점은 무엇입니까? –

+1

@Sergey 스레드가 잠자기 상태 일 때 스레드의 상태를 보았습니까? –

+1

당신이 그걸로 무엇을하려고하는지 우리에게 말하면, 우리는 대체 솔루션을 지적 할 수 있습니다 ... – meriton

답변

2

실행 가능한 상태의 스레드 자바 가상 머신에서 실행 하지만 이러한 프로세서와 같은 운영 체제에서 다른 자원을 기다리고있을 수도있다.

나는 그렇게 생각하지 않습니다 뭔가 다른 :

+0

당신의 힌트가 도움이되었습니다! – Russell

+0

그런 다음 대답을 수락하십시오. – adrianboimvaser

2

의 프로세서 작업을하게한다. 스레드가 실행 가능 상태를 유지할 수있는 유일한 방법은 CPU 바운드이거나 CPU 바운드 인 높은 우선 순위의 스레드를 기다리는 것입니다.

+0

그의 가장 좋은 내기는 while (true) Thread에 해당합니다.수율(); –

0

스레드가 실행 가능한 경우 (OS 수준에서 일반적으로 "실행 가능"과 "실제로 우리가 말하는 CPU에서 실행 중"의 차이가 있음) 조만간 조만간 OS는 그것은 약간의 CPU 시간입니다. 거기에는 아무런 방법이 없습니다. 실제로 "실행 가능한"카테고리가 아니지만 실제로 CPU 시간을주지 않아야합니다. 잠재적 인 옵션은 스레드에 낮은 우선 순위를 부여하는 것일 수 있습니다. 특정 시스템에서 실제로 의미하는 것이 무엇인지 명확히해야합니다. (나는 thread priorities에 대해 약간 썼습니다.

또한 다시 을 보시면 다른 OS에서 다른 것을 의미한다는 것을 알고 계십시오.

그러나 위의 내 의견에서 스트레스를받습니다. OS가 특정 시간 및/또는 일정 시간 동안 모든 연결이 닫히는 대신 스레드 상태/CPU 사용량.

+0

나에게 스레드 상태라고 생각하게 만드는 유일한 이유는 스레드를 휴면 (유휴 연결) 상태로두면 연결이 재설정되지 않는다는 것입니다. 그것은 결국 관련이없는 것일 수도 있습니다. 귀하의 의견을 보내 주셔서 감사합니다. – Russell

1

나는 지금 당장 해결 방법을 찾았다 고 생각합니다.

존재하지 않는 도메인에 연결하려고하면 연결 시간이 초과 될 때까지 스레드가 실행 상태가됩니다 (OS에 따라 다름).

try { 
    new URL("http://thisdomaindoesnotexist.com"). 
    openConnection(). 
    getInputStream(). 
    read(); 
} 
catch (Exception e) {} 

내 컴퓨터에서 약 20 초가 걸립니다.

System.in InputStream도 작동하지만 웹 응용 프로그램에 콘솔 입력이 없습니다.