@Override public CompletableFuture<Void> closeAsync() { CompletableFuture<Void> savedFuture; synchronized (this) { if (null != closeFuture) { return closeFuture; } closeFuture = savedFuture = FutureUtils.createFuture(); } closeAsyncOnce(savedFuture); return savedFuture; }