멀티 스레드 서버 애플리케이션에서 기본 스레드에는 일반적으로 accept()를 호출하는 루프가 있습니다. 들어오는 클라이언트 연결을 처리하기 위한 ServerSocket. 그러나 'exit'와 같은 종료 명령이 수신되면 차단 accept() 메서드를 중단하고 프로그램을 정상적으로 종료하기가 어려워집니다.
이 문제를 해결하려면 다음 접근 방식을 고려하세요.
다른 스레드의 close() 메서드 사용:
예제 코드:
메인 스레드:
<code class="java">while (listening) { try { Socket clientSocket = serverSocket.accept(); // Start client thread and add it to collection } catch (SocketException e) { // Shutdown has been initiated, break out of loop listening = false; } }</code>
관리 스레드:
<code class="java">// Create and connect to listening server socket Socket adminSocket = new Socket("localhost", port); // Wait for 'exit' command ... // Close the admin socket to interrupt the main thread adminSocket.close();</code>
이 접근 방식을 따르면 () 메서드는 ServerSocket이 다른 스레드에서 닫힐 때 발생하는 SocketException에 의해 중단될 수 있으며, 종료 명령에 대한 응답으로 프로그램이 정상적으로 종료될 수 있습니다.
위 내용은 다중 스레드 서버에서 차단 `ServerSocket.accept()` 루프를 정상적으로 종료하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!