code: protected Future<?> getFuture() {
  	long stamp = lock.tryOptimisticRead();
  	Future<?> future = this.future;
  	if (!lock.validate(stamp)) { // Not valid so wait for read lock
  	    stamp = lock.readLock();
  	    try {
  		future = this.future;
  	    } finally {
  		lock.unlockRead(stamp);
  	    }
  	}
  	return future;
      }
docs: Gets the future associated to the action task.
  
  @return Future or null if none has been set.