Olá,
Nao entendi porque este programa imprimi:
“Minha Thread: start( )” seguido de "Executa:run( ) ".
Alguem poderia por favor me explicar em detalhes?
Class MinhaThread extends Thread {
public void run ( ) {
System.out.println("MinhaThread: run ( )" );
}
public void start ( ) {
System.out.println("MinhaThread: start ( )" );
}
}
Class Executa implements Runnable {
public void run ( ) {
System.out.println("Executa: run ( )" );
}
public void start ( ) {
System.out.println("Executa: start ( )" );
}
}
public class Teste {
public void static void main ( String args[ ] ) {
MinhaThread mt = new MinhaThread( );
Executa ex = new Executa( );
Thread th = new Thread (ex);
mt.start ( );
th.start ( );
}
}
A diferença da Classe MinhaThread para a executa é:
MinhaThread: O método main cria um objeto da classe MinhaThread e chama o método start definido na superclasse. Este método cria uma nova thread que irá executar o método run do próprio objeto assim que o escalonador da JVM decidir.
Já a classe Executa: Este construtor recebe como parâmetro uma referência a um objeto que implementa a interface java.lang.Runnable, uma interface muito simples que declara um único método: public void run(). Ao se chamar este construtor a referência passada como argumento é armazenada e ao ser invocado o método start() da thread ela registra a thread junto ao escalonador (até aqui o comportamento é identico ao caso anterior). Contundo, quando a thread obtém o processador, o método run do objeto que implementa a interface Runnable é executado (não o método run do objeto da classe Thread).
Dê uma olhada aqui: http://www.jspbrasil.com.br/jsp/tutoriais/tutorial.jsp?idTutorial=002_009
O start, manda a Thread iniciar a execução em ambos os casos.
E dentro de Run, é que deve ficar a parte do seu código que será tratada como Thread.
Quando você estende a classe Thread tem que anular só o run().
Se você anular o start() ele não chama o run().
Faça um teste, na classe MinhaThread altere o nome de start() para starte() e recompile.
O resultado vai ser o esperado.
Já no caso da interface o start() não existe e o run() é chamado diretamente.
Obrigado pessoal!!
Otimo tutorial,Hericksnake!! Valeu
Obrigado mais uma vez JavaDrops
Era essa explicacao que eu precisava!!