Was Sie suchen, ist das CompletableFuture
(Link führt zur offiziellen JavaDoc) ab Java 8.
Die Verwendung könnte so aussehen:
public static Optional of(PrivilegedAction action, Duration duration) {
final CompletableFuture 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);
}
Eine von mir erstellte Hilfsklasse: (Deutsche Kommentare) DTimeout (Ansehen auf pastebin)