code: @Override
      public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
          // when get returns without an exception the synchronisation is complete
          // and else the exception will be thrown
          if (isInitialized()) {
              synchronisationFuture.get(timeout, unit);
          }
          return internalFuture.get(timeout, unit);
      }
docs: {@inheritDoc}
  @param timeout {@inheritDoc}
  @param unit {@inheritDoc}
  @return {@inheritDoc}
  @throws InterruptedException {@inheritDoc}
  @throws ExecutionException {@inheritDoc}
  @throws TimeoutException {@inheritDoc}