code: int await() throws InterruptedException {
          int s = state.get();
          if (s == SUBMITTED || s == RUNNING && thread != Thread.currentThread()) {
              if (s == RUNNING || nsStartBy == nsAcceptBegin - 1) { // already started or no start timeout
                  state.acquireSharedInterruptibly(1);
                  s = state.get();
              } else { // wait for up to the start timeout, then continue waiting if task has started
                  long nsGetBegin = System.nanoTime();
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(this, tc, "await start timeout for " + (nsStartBy - nsGetBegin) + "ns");
                  state.tryAcquireSharedNanos(1, nsStartBy - nsGetBegin);
                  s = state.get();
                  if (s == SUBMITTED) { // attempt to abort the task
                      abort(true, new StartTimeoutException(getIdentifier(), getTaskName(), //
                                      System.nanoTime() - nsAcceptBegin, //
                                      nsStartBy - nsAcceptBegin));
                      s = state.get();
                  }
                  if (s == RUNNING) { // continue waiting
                      if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                          Tr.debug(this, tc, "await completion");
                      state.acquireSharedInterruptibly(1);
                      s = state.get();
                  }
              }
          }
          return s;
      }
docs: Await completion of the future. Completion could be successful, exceptional, or by cancellation.
  
  @return state of the task after awaiting completion.