मेरे पास इस कोड के साथ एक सर्वर थ्रेड है: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;
}
मैं चाहता हूं कि शट डाउन सर्वर पर प्रतीक्षा कर रहे थ्रेड को अनवरोधित कर सके। अस्वीकरण() अन्यथा मुझे अवश्य ही सर्वर शट डाउन से पहले कनेक्शन की प्रतीक्षा करें।
मैं shutdown() में server.close() नहीं कर सकता क्योंकि मुझे पंजीकृत क्लाइंट को सिग्नल करना होगा कि सर्वर नीचे आ रहा है।
कोई विचार?
मिमी अच्छा जवाब .. शायद मैं समस्या के दृष्टिकोण को बदल सकता हूं। मैं कोशिश-पकड़ के साथ क्लाइंट-साइड में सर्वर शटडाउन का प्रबंधन करता हूं। –