Code example for ThreadPoolExecutor

Methods: getActiveCount, getMaximumPoolSize, submit

0
		// Registramos que entró algo más para hacer 
		metrics.incrementPending();
 
		// Por diseño usamos todos los threads del pool que podamos para las tareas, pero intentamos 
		// no exceder la capacidad 
		final int activeCount = inmediateExecutor.getActiveCount();
		final int maximumPoolSize = inmediateExecutor.getMaximumPoolSize();
		final boolean atFullCapacity = activeCount >= maximumPoolSize;
		if (atFullCapacity) {
			// Estamos en el limite, no agregamos más threads al procesamiento de tareas 
			return; 
		} 
 
		// Agregamos un worker más para resolver las tareas pendientes 
		final TaskWorker extraWorker = TaskWorker.create(inmediatePendingTasks, this.metrics, this);
		try { 
			inmediateExecutor.submit(extraWorker);
		} catch (final RejectedExecutionException e) {
			// Es posible que se agreguen workers de más, en cuyo caso sobran y no es problema 
			LOG.debug("Se rechazó el worker agregado. Activos: " + inmediateExecutor.getActiveCount(), e);
		} 
	} 
 
	/** 
	 * @see net.gaia.taskprocessor.api.processor.TaskProcessor#setExceptionHandler(net.gaia.taskprocessor.api.TaskExceptionHandler)