То, что вы ищете, это CompletableFuture<T>
(ссылка ведет на официальный JavaDoc) из Java 8.
Использование может выглядеть примерно так:
public static <V> Optional<V> of(PrivilegedAction<V> action, Duration duration) {
final CompletableFuture<V> handler = CompletableFuture.supplyAsync(() -> action.run());
V retval = null;
try {
retval = handler.get(duration.toMillis(), TimeUnit.MILLISECONDS);
} catch (TimeoutException te) {
} catch (Exception e) {
try {
handler.cancel(true);
} catch (CancellationException ce) {
}
}
return Optional.ofNullable(retval);
}
Созданный мной утилитарный класс: (комментарии на немецком языке) DTimeout (Посмотреть на pastebin)