Иногда код может зависнуть, сеть не отвечает, поток завис, задача не заканчивается. Чтобы приложение не висело вечно нужно ставить таймауты и принудительно обрывать долгие задачи.
Запускаем задачу в отдельном потоке:
ExecutorService pool = Executors.newSingleThreadExecutor();
Future<String> task = pool.submit(() -> longWork());
Ждём ограниченное время:
String result = task.get(3, TimeUnit.SECONDS);
Если не успело, отменяем задачу:
task.cancel(true); // пытается прервать поток
pool.shutdownNow();
Так мы защищаемся от вечных зависаний процессов и вечных циклов.
👉 Java Ready | #совет
