Dúvida quanto ao estado das Threads

voltar

 
 

Dado o código:

 
 

import java.lang.Thread;

import java.lang.Runnable;

 
 

public class TestThread {

public static void main(String[] args) {

Thread t = new Thread(new DoIt());

System.out.println(“Acabamos de criar: ” + t.getState());

t.start();

}

}

 
 

class DoIt implements Runnable {

@Override

public void run() {

System.out.println(Thread.currentThread().getState());

}

}

Output:

Acabamos de criar: NEW

RUNNABLE

 
 

 
 

Dentro do método run da classe DoIt, a mensagem retornada não deveria ser RUNNING ao invés de RUNNABLE visto que no momento em que a chamada do “sout” acontece, a thread em questão tem que estar executando?

 
 

__________________________________________________________________________________________

 
 

There is no such “RUNNING” state in java.lang.Thread.State enum class, However RUNNABLE indicates 

 
 

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.

A thread can be in only one state at a given point in time. These states are virtual machine states which do not reflect any operating system thread states.

 
 

Colado de <http://download.oracle.com/javase/6/docs/api/java/lang/Thread.State.html#RUNNABLE>

 
 

 
 

RUNNABLE:

 
 

http://download.oracle.com/javase/6/docs/api/java/lang/Thread.State.html#RUNNABLE wrote: A thread in the runnable state is executing in the Java virtual machine but it may be waiting for other resources from the operating system such as processor.

 
 

Colado de <http://www.coderanch.com/t/509637/java-programmer-SCJP/certification/Thread-RUNNABLE-vs-RUNNING#2303688>

 
 

 
 

__________________________________________________________________________________________

 
 

I think it is unable to determine whether it is RUNNABLE or RUNNING, because the context-switching is operating system dependent, therefore there is such constant named RUNNING, which is why Thread.yield() method have not guaranteed behavior. 

 
 

Colado de <http://www.coderanch.com/t/509637/java-programmer-SCJP/certification/Thread-RUNNABLE-vs-RUNNING#2303688>

 
 

__________________________________________________________________________________________

 
 

MINHAS CONCLUSÕES

 
 

RUNNABLE e RUNNING são estados (states) conceituais. O que acontece é que não temos o controle de quando uma Thread deixará de estar no estado RUNNABLE e entrará como RUNNING, isso é determinado pelo scheduler (provavelmente) do sistema operacional.

 
 

Como pudemos ver, não existe o enum State.RUNNING, apenas State.RUNNEABLE.

 
 

Esta entrada foi publicada em Threads com as etiquetas . ligação permanente.

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão / Alterar )

Imagem do Twitter

Está a comentar usando a sua conta Twitter Terminar Sessão / Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão / Alterar )

Google+ photo

Está a comentar usando a sua conta Google+ Terminar Sessão / Alterar )

Connecting to %s