code: public void performAction() throws InterruptedException {
  	if (isDone()) {
  	    return;
  	}
  
  	performing.set(true);
  
  	try {
  	    getAction().perform(unschedulable); // Execute action
  	} catch (final InterruptedException e) {
  	    cancelled.set(true);
  	    throw e;
  	} catch (final Exception e) { // Continue
  	    logger.log(Level.WARNING, "Error performing action", e);
  	    if (!isPeriodicOnException()) {
  		cancelled.set(true);
  	    }
  	} finally {
  	    performing.set(false);
  	    done.set(true);
  	    signalRan(); // Wake up awaiting
  	}
  
  	if (isCancelled()) {
  	    return;
  	}
  
  	if (isPeriodic()) {
  	    estimated.set(System.nanoTime() + getPeriod(TimeUnit.NANOSECONDS));
  	    done.set(false);
  	    addAsWork(); // Add to engines work queue
  	}
      }
docs: Performs the action (setting context state).
  
  @throws InterruptedException
  If action throws this or this is interrupted.