code: public void execute(Runnable command, long timeout, TimeUnit unit) {
  		submittedCount.incrementAndGet();
  		try {
  			super.execute(command);
  		} catch (RejectedExecutionException rx) { // NOSONAR
  			// not to re-throw this exception because this is only used to find out whether the pool is full, not for a
  			// exception purpose
  			final ControllableQueue queue = (ControllableQueue) super.getQueue();
  			try {
  				if (!queue.force(command, timeout, unit)) {
  					submittedCount.decrementAndGet();
  					throw new RejectedExecutionException("Queue capacity is full.");
  				}
  			} catch (InterruptedException ignore) {
  				submittedCount.decrementAndGet();
  				throw new RejectedExecutionException(ignore);
  			}
  		}
  	}
docs: Executes the given command at some time in the future. The command may execute in a new thread, in a pooled
  thread, or in the calling thread, at the discretion of the <tt>Executor</tt> implementation. If no threads are
  available, it will be added to the work queue. If the work queue is full, the system will wait for the specified
  time and it throw a RejectedExecutionException if the queue is still full after that.
  
  @param command the runnable task
  @param timeout A timeout for the completion of the task
  @param unit The timeout time unit
  @throws RejectedExecutionException if this task cannot be accepted for execution - the queue is full
  @throws NullPointerException if command or unit is null