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 ?
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:
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
rlanhellas
Sim sim, perfeita sua explicação. É que vi em um projeto java que lá havia implementada da seguinte forma:
newRunnable{}.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:
newRunnable{}.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
rlanhellas
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).