Как выйти из цикла с отключенным крюком - PullRequest
0 голосов
/ 18 мая 2019

Я создал 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, и код через некоторое время будет использоваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...