Dúvida Thread em Java[Resolvido]

8 respostas
R

Uma dúvida simples, se eu colocar meu código dentro de uma interface Runnable e dar o “run()” eu automaticamente já estou liberando o processador para executar outra tarefa certo ? Desta forma eu não travo o meu programa, corret ?

public void somaResultado(){
   new Runnable(){
     @Override
      public void run(){
          calculaResultadoInterno();
      }

  }.run();
}

Executando o trecho acima, o código é executado porém o programa continua o seu fluxo normal né ?

8 Respostas

Daniel_T_S

Fazendo da forma como você colocou o método calculaResultadoInterno(); é executado normalmente sem uma nova Thread de execução
dessa form você não criará uma nova atividade para o processador trabalhar.

Se deseja que o código seja executado em uma nova thread deve fazer assim:

public void somaResultado(){  
		new Thread(){  
 
    		public void run(){  
				System.out.println("SOMANDO RESULTADO");  
    		}  
  
		}.start();

	}

Dessa forma o código dentro de run(); será executado em outra Thread.

R

Seria porque o Runnable é apenas uma interface?

Daniel_T_S

Você deve pensar no Runnable como o trabalho a ser feito em quanto que Thread é o executor do trabalho.

Veja só aquele código também poderia ser executado desta forma:

class Test{

   public static void main(String[] args){
          Thread executor = new Thread(new TrabalhoASerFeito());
          executor.start();
   }
   

}

class TrabalhoASerFeito implements Runnable{

    public void run(){    
                System.out.println("SOMANDO RESULTADO");    
    } 

}

A classe TrabalhoASerFeito é um Runnable e o método run tem o trabalho que deve ser feito.
A variável de referencia “executor” do tipo thread recebeu um “TrabalhoASerFeito” para executar.

Entendeu?

R

Sim sim, perfeita sua explicação. É que vi em um projeto java que lá havia implementada da seguinte forma:

new Runnable{

  }.run();

Nesse caso acima não é feito nada além de apenas executar o método (de acordo com o oque você falou) e o Runnable é inútil neste caso.

Daniel_T_S

rlanhellas:
Sim sim, perfeita sua explicação. É que vi em um projeto java que lá havia implementada da seguinte forma:

new Runnable{

  }.run();

Nesse caso acima não é feito nada além de apenas executar o método (de acordo com o oque você falou) e o Runnable é inútil neste caso.

Exato!

No caso acima você apenas está chamando um método como qualquer outro.
Sem criar uma nova thread de execução.

R

Obrigado.

Daniel_T_S

Por nada! Feliz por ajudar.
Quando achar que sua dúvida foi satisfeita, coloca um [Resolvido] na descrição do tópico.

Valeu.

ViniGodoy

Só sumarizando.

O runnable é isso mesmo, somente uma interface. E não há nada de especial nela.
Como o Daniel explicou, ele representa só uma tarefa a ser executada. Quem efetivamente dispara essa tarefa numa nova thread é a classe Thread ou a classe ExecutorService.

Por incrível que pareça, isso é alvo de muita confusão. Por exemplo, o comando:

EventQueue.invokeLater(new Runnable() { public void run() { //Faz qualquer coisa } });
Não cria nenhuma Thread (e muita gente pensa que sim). Ele simplesmente envia uma solicitação para a thread do Swing (a mesma que processa os eventos de botão).

Criado 3 de agosto de 2013
Ultima resposta 4 de ago. de 2013
Respostas 8
Participantes 3