Wpis z mikrobloga

@programista4k niby tak, ale zobacz tam podajesz w milisekundach a tu możesz w sekundach minutach i lepiej się to czyta bo wiesz jak długi masz sleep, chyba że zrobisz do stałej i ją ładnie opiszesz
@Saly i @thexDguy dobrze prawią.

Jakbyś jednak nie mógł skorzystać z biblioteki, w co wątpię, to:
- https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/Callable.html,
- https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ScheduledThreadPoolExecutor.html (schedule​(Callable callable, long delay, TimeUnit unit)).

Masz https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/concurrent/ScheduledFuture.html od rezultatu. Jeśli się nie udało, dodajesz jeszcze raz zadanie do egzekutora.

Żebyś nie musiał blokować przez .get() na Future, dorzucasz do zadania np. CountDownLatch ustawionego na 1 i czekasz przez na sygnał zakończenia zadania przez await() alternatywnie await(long timeout, TimeUnit unit) jak masz