code: public <T extends Runnable> T executeSync(T runnable) {
  		synchronized (runnable) {
  			this.executeAsync(runnable);
  			try {
  				runnable.wait();
  			} catch (InterruptedException e) {
  				e.printStackTrace();
  			}
  		}
  
  		return runnable;
  	}
docs: Add a Task to the queue and wait until it's run. It is guaranteed that the Runnable will be processed
  when this method returns.
  @param the runnable to be executed
  @return the runnable, as a convenience method