我編寫了一個小的TCP線程服務器,它爲每個server.accept()創建一個新的線程。幾乎所有的工作都很好,但是我遇到了每個中斷都要殺死所有線程的問題。 (我使用ServiceExecutor來管理線程,因此我使用shutdownNow方法來訪問中斷方法)Worker-instances使用BufferedReader,它是readline方法來接收和計算輸入。 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線程卡在某種方法上的某種方法?rq = 1 – DNA
在'C'中,我會說只是發送一個信號。 – alk