2013-06-12 3 views
2

그래서 내가 relavent 부분은 잘라 사용자 입력 여기높은 CPU 사용량 콘솔에서 읽을 때

public class Test { 
    public static void main(String[] args) throws IOException { 
     BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); 
     String something = input.readLine(); 
    } 
} 

걸리는 작은 프로그램을 쓰고 있어요, 나는 실행이과의 readline에 메인 쓰레드 블록()하지만 내 CPU 사용률은 15 ~ 20 % 정도입니다.

여기까지 무엇보다 콘솔에서 읽을 수있는 효율적인 방법이 있습니다.

편집 : Mac OS 10.8이고 프로세스가 20 분 동안 실행되었습니다. input.readline() 문은 내부의 간단한 처리로 while 루프에 래핑되지만 코드가 도착하지 않는다는 것을 알고 있습니다.

+0

마지막으로 얼마나 걸립니까? 아마도 그것은 시작을 마무리하는 JVM 일뿐입니다 ... – SJuan76

+0

OS가 프로그램의 리소스를 제한 할 수 있으므로 최대 15-20 %를 얻을 수 있습니다. –

+0

정확한 입력을 제공하는 것이 유용하다고 생각합니다. –

답변

1

readLine()의 상태를 확인하는 코드가 있다고 가정합니다. 그렇지 않으면 Java가 계속 차단됩니다.

String line = null; 
while ((line = br.readLine()) != null) { 
    // handle contents of line here 
} 

사용자 입력을 읽으려면 스캐너 클래스를 사용하는 것이 좋습니다.

Scanner sc = new Scanner(System.in); 
int num = sc.nextInt(); 
.... 
+0

예 미안하다, 정확하게 당신이 의심했던 것에 따라, 나는 그것이 문제가 될 것을 기대하지 않았다, 확실히 isnt는 CPU 사용을 초래하고있다? –

+0

방금 ​​스캐너를 사용해 보았는데 여전히 15 % 정도의 사용량입니다. –

+0

CPU 사용량에 대해서는 잘 모르겠지만 JVM이 BufferedReader에서 읽는 것을 기다리고 있다면 검사 과정에서 일부 자원. – Snapman