Pessoal, na linha 26 eu uso o método execute da classe ExecutorService e passo um Runnable para ele como argumento. Na linha 27, faço o mesmo. A minha dúvida está em quando essas threads são iniciadas. Na documentação do Java, é dito o seguinte para execute:
Executes the given command at some time in the future.
Entendi que esse comando será executado em uma thread futuramente, ou seja, não imediatamente.
Em executor.shutdown, a documentação diz:
Initiates an orderly shutdown in which previously submitted tasks are executed, but no new tasks will be accepted.
Entendi que as threads que já foram criadas pelo pool são executadas agora e assim que terminadas, encerradas. Elas tinham sido criadas para serem executadas futuramente. Agora é a hora de executar! Entretanto, não serão aceitas novas tarefas, ou seja, depois desse comando shutdown, não é aceito mais instruções executor.execute(…).
Nas linhas 26 e 27, duas threads são criadas e estão no estado de novo. Elas ainda não estão prontas.
Na linha 29, essas threads são colocadas no estado de pronto através de executor.execute(). A ordem de execução das threads dependerá do Sistema Operacional, já que não defini prioridade.
E sequência de acontecimentos é essa mesma? Peço que me corrijam, caso eu esteja enganado!
Obrigado!
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ClasseThread implements Runnable{
private int tempo;
public ClasseThread(int tempo){
this.tempo = tempo;
}
public void run(){
try{
Thread.sleep(tempo);
}
catch(InterruptedException e){}
}
public static void main(String[] args) {
ExecutorService executor = Executors.newCachedThreadPool();
executor.execute(new ClasseThread(1000));
executor.execute(new ClasseThread(500));
executor.shutdown();
}
}