我有一個服務器線程使用此代碼:如何取消阻塞ServerSocket.accept()上阻塞的線程?
public void run() {
try {
ServerSocket server;
EneaLog.printLog("Server is running.");
server = new ServerSocket(this.portnumber);
while (true) {
new EneaServerConnection(server.accept(), this.project,stopped).start();
if (stopped) {
EneaLog.printLog("Server safe-shutdown completed.");
EneaLog.printLog("Hi!");
server.close();
return;
}
}
} catch (IOException ex) {
Logger.getLogger(EneaServer.class.getName()).log(Level.SEVERE, null, ex);
project.getExceptionHandler().handler(ex);
}
}
和關斷的方法是這樣的:
public void shutdown() {
EneaLog.printLog("Server shutdown NOW!");
stopped = true;
}
我想要關機可以解禁等待server.accept線程(),否則我在服務器關閉之前必須等待連接。
我不能在shutdown()中執行server.close(),因爲我必須向已註冊的客戶端發送服務器正在關閉的信號。
任何想法?
嗯好的答案..也許我改變了解決問題的方法。我用try-catch管理客戶端的服務器關閉。 – 2009-10-02 16:18:54