Q2039934 Programação

Imagem associada para resolução da questão

Alternativas

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