code: public void setResult(E result) {
          boolean fireListeners = false;
          if (!isDone()) {
              fireListeners = this.result.compareAndSet(null, result);
              synchronized (this) {
                  if (waiters > 0) {
                      notifyAll();
                  }
              }
                  
          }
          if (fireListeners) {
              notifyListeners();
          }
          
      	
      }
docs: Set the <code>E</code> for the future and notify all waiting threads + the listeners.
  
  @param result