Uma thread em Java em qualquer ponto do tempo existe em um determinado estado. Assinale a alternativa que contém o estado no qual a thread pode atualmente estar em execução ou pode estar pronta para execução em qualquer instante do tempo
- A)Running
Errada: "Running" não é o nome do estado oficial na enumeração de estados de thread do Java.
- B)Blocked
Errada: BLOCKED significa que a thread está esperando por um monitor, não executando nem pronta para executar.
- C)Runnable
Certa: RUNNABLE é o estado em que a thread pode estar executando ou pronta para execução.
- D)Terminated
Errada: TERMINATED indica que a thread já finalizou sua execução.
- E)Idle
Errada: Idle não é um estado padrão reconhecido pela API de threads do Java.
Gabarito: C
Em Java, a thread pode passar por alguns estados bem conhecidos: NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING e TERMINATED. A questão quer o estado em que a thread pode estar executando ou pronta para executar a qualquer momento. Esse é o estado RUNNABLE, que é uma espécie de "fila de largada": a thread pode estar realmente rodando na CPU ou apenas aguardando a vez para rodar. Aqui mora a pegadinha: muita gente pensa que "running" é o nome do estado oficial, mas na API de Java o estado padrao usado na enumeração Thread.State é RUNNABLE. Ou seja, o Java não separa, na enumeração, "pronta para executar" e "executando de fato" como estados distintos nessa classificação. Já BLOCKED é quando a thread está travada esperando um monitor de bloqueio, e TERMINATED é quando ela já terminou de vez. Idle não é um estado oficial da thread em Java. Então, quando a banca descreve "em execução ou pronta para execução", ela está descrevendo exatamente o conceito de RUNNABLE. Esse entendimento bate com a documentação oficial da classe Thread.State da Java API, que define RUNNABLE como a thread executando na máquina virtual Java ou pronta para executar em um processador. Em prova, essa formulação costuma aparecer quase literal.