Вы можете использовать метод Future, в частности, метод V get(long timeout, TimeUnit unit)
:
При необходимости ожидает не более заданного времени для завершения вычисления, а затем извлекает егорезультат, если доступен.
И используйте его следующим образом:
Callable<String> task = () -> {
...
};
public Future<String> myMethod() {
return Executors.submit(task);
}
public String fallBackMethod() {
...
}
String value = null;
try {
Future<String> result = myMethod.get(1, TimeUnit.SECONDS);
value = result.get();
} catch (TimeoutException e) {
value = fallBackMethod();
}
Обратите внимание, что вы не можете остановить выполнение метода после его запуска, если вы не изменилиэтот метод периодически проверяет, завершился он или нет, но часто вы не можете, например, если вы запрашиваете запрос к базе данных, и запрос занимает 5 секунд, которые вы не можете проверить раньше, чем через 5 секунд.