나는 지정된 호스트 이름과 포트에서 들어오는 연결을 수신하는 앱을 가지고있다. 청취는 listen()
(아래 참조) 방법으로 호출되며, 이는 입력 스트림을 처리하기 위해 ServerSocket.accept()
을 사용하여 수신 연결을 계속 대기하고 새로운 Thread
을 생성합니다.소켓에서 IO를 기다리는 동안 차단 된 스레드를 방해합니까?
private ServerSocket serverSocket;
private Thread listenerThread;
public void listen() throws IOException {
this.listenerThread = new Thread(new Runnable() {
@Override
public void run() {
while (true) {
try {
Socket socket = TheServerClass.this.serverSocket.accept();
// Create new thread to handle the incoming connection
}
catch (IOException exc) { }
}
}
});
this.listenerThread.start();
}
이제 실행을 중단하고 싶습니다. listenerThread
. 그러나 this.listenerThread.interrupt()
으로 전화하면이 기능이 작동하지 않습니다.
스레드를 중단하여 스레드를 중단시킬 수 있다고 생각했는데 왜 작동하지 않는 것입니까?
(주의 사항 : 가능한 솔루션은 this.serverSocket.close()
를 사용하여 ServerSocket
를 닫이지만, interrupt()
또는 뭔가 수행 할 수 있습니다?)
표준 소켓을 사용할 때 소켓을 닫을 때만 가능합니다. 동일한 문제를 다루는 여기에 몇 가지 질문이 있습니다 (예 : http://stackoverflow.com/questions/1510403/how-to-unblock-a-thread-blocked-on-serversocket-accept –
그것이 작동하지 않는다는 것은 무엇을 의미합니까? 예외를 던집니까? 아니면 그냥 계속 하시겠습니까? – medopal
@medopal 스레드는 종료하지 않고 계속 실행됩니다. –