code: public void resetFuture() {
          // this must be done before "completed = false". Since reuseCount
          // is volatile, and we ONLY need it to be in sync with the thread
          // in AsyncSocketChannelHelper WHEN completed is detected as being
          // false, then we should not need further synchronization.
          this.reuseCount++;
          if (getTimeoutWorkItem() != null) {
              getTimeoutWorkItem().state = TimerWorkItem.ENTRY_CANCELLED;
          }
          setTimeoutWorkItem(null);
  
          this.completed = false;
          this.fullyCompleted = false;
          this.exception = null;
          this.firstListener = null;
          this.firstListenerState = null;
      }
docs: Reset this future object back to the default values.