¿Cómo funciona maximumPoolSize of ThreadPoolExecutor?

Estoy tratando de entender la clase ThreadPoolExecutor. He leído estoresponder y el Javadoc. Pero mi experimentación no coincide con esa descripción:

Inicializo el conjunto de subprocesos con una fábrica para rastrear las ID

int tcounter = 0;
ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 4, 1, TimeUnit.MINUTES,
        new ArrayBlockingQueue<Runnable>(1000), new ThreadFactory() {

            @Override
            public Thread newThread(Runnable r) {
                return new mThread(tcounter++, r);
            }
        });

public class mThread extends Thread {
    int id;

    private mThread(int id, Runnable run) {
        super(run);
        GLog.e("created thread " + id);
        this.id = id;
    }

}

entonces la tarea:

public class mRunanble implements Runnable {
    int value = 0;

    private mRunanble(int value) {
        super();
        this.value = value;
    }

    @Override
    public void run() {
        SystemClock.sleep(3000);
        Thread t = Thread.currentThread();
        if (t instanceof mThread) {

            GLog.e("Say " + (value) + " on thread " + ((mThread) t).id);
        } 

    }

}

y asigna un botón a la acción:

executor.execute(new mRunanble(i++));

Pero hago spam en ese botón y el tercer hilo nunca se crea, entonces, ¿qué es para el segundo parámetro en el constructor ThreadPoolExecutor (maximumPoolSize=4). Estaba esperando que se crearan 4 hilos y que 2 de ellos fueran eliminados después de 1 minuto del final de la ejecución

Respuestas a la pregunta(3)

Su respuesta a la pregunta