
Comentários
Veja os comentários dos nossos alunos
GABARITO D
A) A execução do programa termina ao final da execução do método main. ERRADO. Quando main termina, o próprio programa continua a executar porque ainda há Threads, tarefas que devem terminar de executar. O programa só terminará depois que essas tarefas estão concluídas.
B) As threads são executadas em uma ordem determinística uma após a outra. ERRADO. Não podemos prever a ordem em que as tarefas começarão a ser executadas, mesmo se conhecermos a ordem em que elas foram criadas e iniciadas
C) O método execute da classe ExecutorService cria uma nova thread a cada chamada e atribui um objeto que implementa a interface Runnable para cada uma dessas threads.ERRADO. O método execute é da interface Executor e não de ExecutorService. ExecutorService estende Executor.
FONTE: Java Como Programar - DEITEL
A classe implementa Runnable.
Cada tarefa imprime valores de 0 a 9.
No método main:
- é criado um ExecutorService com Executors.newCachedThreadPool();
- três tarefas são submetidas com execute();
- em seguida, é chamado shutdown().
Alternativa A – Incorreta
O método main pode terminar, mas:
- as threads do ExecutorService continuam executando;
- o programa só termina quando todas as tarefas submetidas finalizam.
Alternativa B – Incorreta
- O newCachedThreadPool() executa tarefas de forma concorrente;
- a ordem de execução não é determinística;
- as saídas no console podem se intercalar.
Alternativa C – Incorreta
- Isso não é garantido;
- o newCachedThreadPool() pode reutilizar threads existentes;
- o executor gerencia o pool, não cria obrigatoriamente uma nova thread a cada chamada.
Alternativa D – Correta
Esse é exatamente o comportamento definido na API do Java:
- shutdown():
- não aceita novas tarefas;
- permite que as tarefas já submetidas terminem normalmente;
- diferente de shutdownNow(), que tenta interromper as tarefas em execução.
Resposta correta: Alternativa D
Resumo rápido (para fixar):
- execute() → submete uma tarefa
- shutdown() → não aceita novas tarefas, mas conclui as atuais
- shutdownNow() → tenta interromper tudo
- ordem de execução das threads não é garantida
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo