Написать одну строку в гнездо в течение 10 секунд или другую строку, если время вышло


Я реализовал метод, который будет посылать данные на сервер, если он (Пи малины ввода пин высокой, в данном случае) происходит в течение 10 секунд. Если этого не произойдет в течение 10 секунд, а затем я должен отправить некоторые другие данные.

Эта реализация работает для меня, но я думаю, что должно быть еще лучше реализация.

ScheduledExecutorService timeoutScheduler = Executors.newScheduledThreadPool(1);

ScheduledFuture<?> timeoutHandler = timeoutScheduler.schedule(() -> {
    try {
        socketConnection.writeData("String that should be sent if time is out");
        turnstileClosed.removeAllListeners();
        timeoutScheduler.shutdownNow();
    } catch (IOException e) {
        e.printStackTrace();
    }
}, 10_000, TimeUnit.MILLISECONDS);

turnstileClosed.addListener((GpioPinListenerDigital) event -> {
    try {
        if (event.getState() == PinState.HIGH) {
            socketConnection.writeData("String that should be sent within 10 seconds");
            timeoutHandler.cancel(true);
            timeoutScheduler.shutdownNow();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
});

timeoutScheduler.awaitTermination(10_000, TimeUnit.MILLISECONDS);
turnstileClosed.removeAllListeners();


Комментарии