code: public T get() throws InterruptedException, ExecutionException {
          Object r;
          return reportGet((r = result) == null ? waitingGet(true) : r);
      }
docs: Waits if necessary for this future to complete, and then
  returns its result.
  
  @return the result value
  @throws CancellationException if this future was cancelled
  @throws ExecutionException if this future completed exceptionally
  @throws InterruptedException if the current thread was interrupted
  while waiting