code: private int externalInterruptibleAwaitDone() throws InterruptedException {
          int s;
          if (Thread.interrupted())
              throw new InterruptedException();
          while ((s = status) >= 0) {
              if (U.compareAndSwapInt(this, STATUS, s, s | SIGNAL)) {
                  synchronized (this) {
                      if (status >= 0)
                          wait();
                      else
                          notifyAll();
                  }
              }
          }
          return s;
      }
docs: Blocks a non-worker-thread until completion or interruption.