다른 사람들의 의견은 정확합니다. java.io에서 Java의 "오래된 I/O"라이브러리는 블로킹 호출을 포함합니다. 그러나 그들은 바쁜 기다리지 않습니다. I/O를 차단하고 있으며 커널이 I/O를 사용할 수있게되면 다시 일정을 조정합니다.
나는 완전히 확신하지 못했기 때문에 나 자신을 위해 그것을 시도했다. 이 샘플 클래스를 가져 가십시오.
import java.io.*;
public class Test {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String line = reader.readLine();
System.out.println(line);
}
}
그리고 명령 줄에서 컴파일하십시오. 그런 다음 실행 시키되 아무 것도 입력하지 마십시오. 문자를 입력 할 때까지 프로그램이 입력에 대해 차단되어야하며 입력 할 때까지 readline을 지나서 진행되지 않습니다. ps
은이 프로세스에 대한 자세한 내용을 알려줄 수 있어야합니다. ps
에서 더 자세한 정보를 얻을 수 a
플래그를 사용
이
[email protected]<computer-name>] ps a
PID TT STAT TIME COMMAND
3846 s000 S 0:00.16 -zsh
3992 s000 S+ 0:00.40 /usr/bin/java Test
PS에 대한 매뉴얼 페이지 말한다 :
상태 상태는 문자의 순서에 의해 주어진다, 예를 들어, ``RWNA ''.
- I 마크 (이상 20 에 대한 초 이상 수면) 유휴 프로세스 : 첫 번째 문자 는 프로세스의 실행 상태를 나타냅니다.
- 실행 가능한 프로세스를 표시합니다.
- S 약 20 초 미만으로 대기중인 프로세스를 표시합니다. 난 그냥 과정을 시작한 이후
는 그리고, S는 의미가 있습니다. 프로세스는 OS에 의한 스케줄링을 기다리고 자고 있습니다. 실제로 top
을 확인하면 프로세스가 0 % CPU를 사용하고 있음을 알 수 있습니다.
이 호출의 성능에 대해 걱정할 필요가 없습니다. 대기 중이거나 폴링 중이므로 시스템이 사용자를 위해 I/O 이벤트를 처리하고 프로세스를 지능적으로 처리합니다.
이러한 답변 중 어떤 것이 귀하의 질문을 충분히 설명 했습니까? 그렇다면 아마 당신의 대답으로 하나를 표시해야합니다. 그렇지 않다면 질문을 편집하여 아직 명확하지 않은 것을 철자하십시오. – jasonmp85