As threads são recursos que permitem que múltiplas execuções...

Próximas questões
Com base no mesmo assunto
Q2005920 Programação
As threads são recursos que permitem que múltiplas execuções ocorram no mesmo ambiente do aplicativo com um grande grau de independência uma da outra, possibilitando, dessa forma, a ocorrência de múltiplas atividades simultâneas em uma mesma aplicação. Sobre as threads na linguagem Java, analise as afirmativas a seguir.
I. São considerados possíveis estados de uma thread: novo; executável; espera; espera programada; e, concluído. II. Na maioria dos Sistemas Operacionais, cada thread recebe uma pequena quantidade de tempo do processador denominada quantum. III. Implementar a interface Runnable do pacote Java.lang é uma forma de criar um aplicativo de múltiplas threads, utilizando classes e métodos predefinidos para criar threads que executem objetos Runnables.
Está correto o que se afirma em
Alternativas

Gabarito comentado

Confira o gabarito comentado por um dos nossos professores

A alternativa correta é a D - II e III, apenas.

Vamos entender o porquê analisando cada afirmativa:

II. Essa afirmativa está correta, pois em sistemas operacionais modernos, o escalonamento de threads é geralmente feito através de um mecanismo conhecido como time slicing, onde cada thread recebe uma fração de tempo para executar em um núcleo do processador, conhecida como quantum. Isso permite que várias threads pareçam estar rodando simultaneamente, mesmo em processadores com um único núcleo.

III. Esta afirmativa também está correta. Em Java, uma das maneiras de se criar uma thread é implementando a interface Runnable. Um objeto que implementa esta interface pode ser passado para o construtor de um objeto da classe Thread, que pode ser iniciado com o método start(), executando o código definido no método run() em uma nova thread.

No entanto, a afirmativa I não está completamente correta. Os estados de uma thread em Java são: NEW (nova), RUNNABLE (executável), BLOCKED (bloqueada), WAITING (esperando indefinidamente), TIMED_WAITING (esperando por um tempo programado) e TERMINATED (concluído). O termo "espera programada" poderia ser interpretado como TIMED_WAITING, mas a palavra específica "espera" poderia causar confusão, pois não é um termo utilizado para descrever um estado de thread em Java. A confusão provém do uso do termo "espera" ao invés de "WAITING" ou "TIMED_WAITING", que são os termos corretos para descrever os estados de espera de uma thread em Java.

Com base no exposto acima, podemos concluir que a alternativa correta é realmente a D - II e III, apenas, pois apenas essas duas afirmativas estão corretas e de acordo com os conceitos de programação multithread em Java.

Clique para visualizar este gabarito

Visualize o gabarito desta questão clicando no botão abaixo

Comentários

Veja os comentários dos nossos alunos

A execução de uma thread pode passar por 4 estados:

1 - Novo;

2 - Executável;

3 - Bloqueado e;

4 - Encerrado.

Complementando o comentário do colega Tiago, segundo DEITEL (JAVA, Como programar, 8ª ed., capítulo 26, página 805) as threads podem assumir os seguintes estados:

  1. Novo
  2. Executável
  3. Espera
  4. Espera Cronometrada
  5. Terminado
  6. Bloqueado

GAB: D



Em java:

Tipo de constante: Novo

Descrição: estado do thread para um thread que ainda não foi iniciado.

Declaração: Thread public static final.State NEW

Tipo de constante: Executável

Descrição: estado do thread para um thread executável. Um encadeamento no estado executável está sendo executado na máquina virtual Java, mas pode estar aguardando outros recursos do sistema operacional, como processador.

Declaração: public static final Thread.State RUNNABLE

Tipo de constante: Bloqueado

Descrição: estado de thread para um thread bloqueado esperando por um bloqueio de monitor. Um thread no estado bloqueado está aguardando que um bloqueio de monitor entre em um bloco / método sincronizado ou reinsira um bloco / método sincronizado após chamar Object.wait().

Declaração: público static final Thread.State BLOCKED

Tipo constante: Esperando

Descrição: estado do thread para um thread em espera. Estado do thread para um thread em espera. Um thread está em estado de espera devido à chamada de um dos seguintes métodos:

  • Object.wait sem tempo limite
  •  sem tempo limite
  • LockSupport.park

Um encadeamento no estado de espera está aguardando que outro encadeamento execute uma ação específica.

Declaração: público static final Thread.State WAITING

Tipo de constante: espera cronometrada

Descrição: estado do thread para um thread em espera com um tempo de espera especificado. Um encadeamento está no estado de espera cronometrado devido à chamada de um dos seguintes métodos com um tempo de espera positivo especificado:

  • Thread.sleep
  • Object.wait com tempo limite
  • Thread.join com tempo limite
  • LockSupport.parkNanos
  • LockSupport.parkUntil

Declaração: thread public static final.State TIMED_WAITING

Tipo de constante: Terminado

Descrição: estado do thread para um thread encerrado. O thread concluiu a execução

Declaração: thread public static final.State TERMINATED

Fonte:https://acervolima.com/ciclo-de-vida-e-estados-de-um-thread-em-java/

d-

A thread state. A thread can be in one of the following states:

   NEW

   A thread that has not yet started is in this state.

   RUNNABLE

   A thread executing in the Java virtual machine is in this state.

   BLOCKED

   A thread that is blocked waiting for a monitor lock is in this state.

   WAITING

   A thread that is waiting indefinitely for another thread to perform a particular action is in this state.

   TIMED_WAITING

   A thread that is waiting for another thread to perform an action for up to a specified waiting time is in this state.

   TERMINATED

   A thread that has exited is in this state.

https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.State.html

ex.: de uso de threads em java:

public class Runnableee {

      public static void main(String[] args) {

          // criar (new Thread) e iniciar thread (new Runnable)

          Thread thread1 = new Thread(new MyRunnable("Thread 1"));

          thread1.start();

          // outra thread

          Thread thread2 = new Thread(new MyRunnable("Thread 2"));

          thread2.start();

      }

      // class para Runnable interface

      static class MyRunnable implements Runnable {

          private String threadName;

          public MyRunnable(String threadName) {

              this.threadName = threadName;

          }

          @Override

          public void run() {

              for (int i = 0; i < 5; i++) {

                  System.out.println(threadName + ": Count " + i);

                  try {

                      Thread.sleep(1000); // Pausa 1 s

                  } catch (InterruptedException e) {

                      System.out.println(threadName + " interrupted.");

                  }

              }

              System.out.println(threadName + " finished.");

          }

      }

}

Clique para visualizar este comentário

Visualize os comentários desta questão clicando no botão abaixo