import org.osgi.util.promise.Promise;
import org.osgi.util.promise.Deferred;
Deferred<String> deferred = new Deferred<>();
Promise<String> promise = deferred.getPromise();
new Thread(() -> {
try {
Thread.sleep(2000);
} catch (Exception e) {
deferred.fail(e);
}
}).start();
promise.thenAccept(result -> {
}).onFailure(throwable -> {
});