2012-05-08 5 views
0

소켓에서 수신 대기중인 서버 스레드가 있습니다. 다음과 같은 진술 :accept()를 호출하는 스레드는 어떻게됩니까?

Socket client = serverSocket.accept(); 

이 accept 함수를 실제로 호출하는 스레드는 어떻게됩니까? javadoc은 "이 소켓에 연결을 기다리고 받아들입니다. 연결이 완료 될 때까지 메소드가 멈 춥니 다."라고 말합니다. "블록"은 인터럽트 또는 다른 요청을받을 때까지 busy busy 또는 sleep/in sleep 상태를 의미합니까? 또한,이 동작을 읽기와 같은 소켓상의 모든 블로킹 함수 호출에 대해 일반화 할 수 있습니까?

+3

블록은 블록을 의미합니다. 이 스레드는'accept()'가 반환 될 때까지 계속되지 않습니다. (기본 시스템 호출 자체가 차단되고 있습니다. 정확히 어떻게 * 작동하는지는 Java의 범위 밖에 있으므로, "시스템"관점에서 보는 것이 더 적합 할 수 있습니다 ...) –

+0

오케이. 감사! – user1355348

답변

2

간단히 말해 스레드는 단순히 멈추고 연결이 만들어지기를 기다립니다. 연결되면 다음 지침으로 계속 진행됩니다.

-1

구현에 따라 다릅니다. Java가 구현되는 방법뿐만 아니라 Java가 호출하는 런타임 라이브러리 및 OS 시스템 호출이 구현되는 방법도 구현됩니다. 그러나 파일 핸들을 사용할 수있게 될 때까지 기다리는 블로킹은 OS가 최적화 할 수있는 유형이기 때문에 이 아닌 대기 대기가됩니다. 그래서, 당신은 확신 할 수 없지만 어쩌면.

+1

-1. 대답이 아닙니다. – EJP

관련 문제