Проблема с CompletableFuture

Всем привет, у меня приложение отправляет письмо на почту, иногда почтовый сервер зависает и ничего не отдает, и соответственно приложение на отправку тоже, лечится после рестарта приложения. Чтобы этого избежать,я решил воспользоваться таймаутом CompletableFuture, и отпускать метод, чтобы продолжать отправку. С многопоточностью не работал совсем, поэтому посмотрел в интернете.

Вот мой код

CompletableFuture<Void> future = CompletableFuture.runAsync(new Runnable() {
    @Override
    public void run() {
        mailSender.send(message);
        log.info("End post!");
    }
});

try {
    future.get(10, TimeUnit.SECONDS);
} catch (TimeoutException ex) {
    log.info("GET TIMEOUT FROM POST SERVICE!");
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
}

Все работало хорошо неделю, в логах видно что использовался ForkJoinPool
INFO [ForkJoinPool.commonPool-worker-5]: End post!

Но сегодня, почему-то приложения начало постоянно отваливаться на таймауте. Не понимал что не так, начал писать даже сетевикам.

Потом решил убрать свою фичу, и вооля работает, опять включил, снова по таймауту отваливается.

После решил добавить Executor ExecutorService executor = Executors.newSingleThreadExecutor(); и передавать его в runAsync.

Все заработало. сейчас тянет из пула [pool-507-thread-1]: End post!

В логе кстати число увеличивается постоянно с каждым сообщением 508, 509 и т.д.

Вопрос, что могло почти не так? Может я что-то сделал криво, помогите плиз. Вопрос просто суперсрочный(((

Вот первая часть вопроса, тут описан как раз класс выше Зависает JavaMailSender


Ответы (0 шт):