Я создал SMTPServer (с Java.NIO), который выполняет цикл while и обрабатывает входящие клиенты. Я хотел добавить Shutdownhook для выхода из цикла while и закрытия всех открытых селекторов, Sockest. и т.д. и заканчивая программу кодом завершения 0. Но я не совсем понимаю, как я могу использовать shutdownhook в моем коде.
public class SMTPServer {
private static volatile boolean keepRunning = true;
private static methode1 {}
private static methode2 {}
private static methode3 {}
public static void main(String[] args) throws IOException {
ServerSocketChannel ssc = ServerSocketChannel.open();
Selector selector = Selector.open();
...
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
public void run() {
keepRunning = false;
}
});
...
while(keepRunning) {
if (selector.select() == 0)
continue;
here I handle the Client
}
selector.close();
ssc.close();
System.out.println("Server offline");
System.exit(0);
}
}
Думаю, что при выходе из программы в IntelliJ она выпадет из цикла while, потому что я изменил keepRunning на false, и код через некоторое время будет использоваться.