docs: public Object executeTimed(long timeout) throws TimeOutException, InterruptedException, Throwable {
  		//TODO this also executes asynchronously, yet the current thread waits for it to execute
  		executeAsync();
  		executeThread.join(timeout);
  		if (execException == null && !finished) {
  			interrupt();
  			if (!finished)//execution could still have been finished by now
  			{
  				execException = new TimeOutException("execution timed out (" + timeout + "ms)");
  			}
  		}
  		if (execException != null) {
  			throw execException;
  		}
  		return retval;
  	}