¿Por qué ScheduledExecutorService no genera subprocesos como sea necesario?

En mi aplicación, uso ScheduledExecutorService, pero solo se genera un hilo para manejar las tareas programadas. ¿Esto se debe a que ScheduledExecutorService no genera subprocesos para manejar las tareas pendientes?

Aquí hay un fragmento de código que solo mostrará "run () 1" en lugar del esperado "run () 1" seguido de "run () 2" ... "run () 10."

public class App {

    public static void main(String[] args) {
        int N = 10;
        Runnable runner = new Runnable() {

            public void run() {
                foo();
            }
        };
        for (int i = 0; i < N; i++) {
            executor.schedule(runner, i, TimeUnit.MILLISECONDS);
        }
    }

    private static void foo() {
        System.out.println("run() " + (++n));
        synchronized (executor) {
            try {
                executor.wait();
            } catch (InterruptedException ex) {
                Logger.getLogger(App.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        System.out.println("finished()");
    }
    private static Logger logger = Logger.getLogger(App.class.getName());
    private static int n = 0;
    private static ScheduledExecutorService executor = Executors.newScheduledThreadPool(1);
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta