Por que o ScheduledExecutorService não gera threads conforme necessário?
Na minha aplicação eu uso ScheduledExecutorService, mas apenas um thread é gerado para lidar com as tarefas agendadas. Isso ocorre porque ScheduledExecutorService não gera threads para lidar com as tarefas pendentes?
Aqui está um trecho de código que irá produzir apenas "run () 1" em vez do 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);
}