【发布时间】:2011-12-20 00:43:11
【问题描述】:
我有一个带有此代码的服务器线程:
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(),因为我必须向已注册的客户端发出服务器正在关闭的信号。
有什么想法吗?
【问题讨论】: