Tôi có một thread máy chủ với mã này:Cách bỏ chặn một chuỗi bị chặn trên 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);
}
}
và một phương pháp tắt máy như thế này:
public void shutdown() {
EneaLog.printLog("Server shutdown NOW!");
stopped = true;
}
Tôi muốn tắt máy mà có thể mở khóa chủ đề đó đang chờ đợi trên server.accept() nếu không tôi phải đợi kết nối trước khi tắt máy chủ.
Tôi không thể làm server.close() trong tắt máy() vì tôi phải báo hiệu cho khách hàng đã đăng ký rằng máy chủ đang ngừng hoạt động.
Bất kỳ ý tưởng nào?
mmm câu trả lời hay .. Có lẽ tôi thay đổi cách tiếp cận vấn đề. Tôi quản lý tắt máy chủ ở phía máy khách với try-catch. –