docs: @Override
      public Object get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
  
          final boolean isTraceOn = TraceComponent.isAnyTracingEnabled();
  
          if (isTraceOn && tc.isEntryEnabled()) {
              String completeTime = "Timeout setting: " + timeout + " " + unit;
              Tr.entry(tc, "get - " + completeTime + " Future object: " + this);
          }
  
          if (unit == null) { // F16043
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(tc, "get - null unit");
              throw new NullPointerException("unit");
          }
  
          long startTime = System.nanoTime();
  
          if (!await(timeout, unit)) { // F16043
              if (isTraceOn && tc.isEntryEnabled())
                  Tr.exit(tc, "get - asynchronous method timed out, throwing TimeoutException.");
              throw new TimeoutException();
          }
  
          long remainingTime = timeout - unit.convert(System.nanoTime() - startTime, TimeUnit.NANOSECONDS);
  
          Object resultToReturn = getResult(remainingTime, unit); // d650178
  
          if (isTraceOn && tc.isEntryEnabled()) {
              Tr.exit(tc, "get: " + Util.identity(resultToReturn));
          }
          return (resultToReturn);
      }