나는 모든 server.accept()에 대해 새로운 쓰레드를 생성하는 작은 TCP 쓰레드 서버를 코딩했다. 거의 모든 것이 훌륭하게 작동하지만 인터럽트 당 모든 스레드를 죽일 수있는 문제가 있습니다. (ServiceExecutor를 사용하여 스레드를 관리합니다. 따라서 shutdownNow 메서드를 사용하여 interrupt-method를 사용합니다.) Worker-instances는 BufferedReader를 사용하며 입력을 받고 계산하는 readline-method입니다. AFAIK readline 블록 및 은 인터럽트에 반응하지 않지만 어떻게 중지합니까?종료 TCP 쓰레드 서버
while(!isInterrupted()){
try {
clientSocket = this.serverSocket.accept();
} catch(IOException e){
break;
}
this.threadPool.execute(new ThreadWorker(clientSocket));
}
threadPool.shutdownNow();
try{
serverSocket.close();
}catch(IOException e){
//todo
}
입출력 스트림을 없애기 위해 ServerSocket을 닫으려고했으나 예상대로 작동하지 않았습니다.
이상적으로 무기한 차단되는 메서드를 호출하지 마십시오. –
http://stackoverflow.com/questions/671049/how-do-you-kill-a-thread-in-java?rq=1 및 http://stackoverflow.com/questions/1948317/forceful-termination도 참조하십시오. thread-st-on-an-api-call-of-some-method? rq = 1 – DNA
'C'에서 신호를 보냅니다. – alk