Ok, o metodo main é uma thread e isso não pode ser nenhuma novidade para quem estiver estudando pra certificação, mas essa questão me deixou em duvida…
packageorg.scjp;publicclassTesteRunnable{publicstaticvoidmain(Stringargs[]){Thread.currentThread().setName("Main");// Renomeia a Thread 'main'Runnablea=newA("Worker");a.run();}}classAimplementsRunnable{A(Stringnome){newThread(this,nome).start();//Cria uma nova referencia a um objeto Thread// Com a ClasseA e o nome recebido da class TesteRunnable }publicvoidrun(){System.out.print(Thread.currentThread().getName());}}
Então teriamos 2 Threads,
a ‘main’ renomeada de mainThread-0 para Main
e a criada na classe A com o nome de Worker…
tá mal explicado isso… :roll:
alguem poderia dar uma melhor explicação?
valeu!
keller
Fazendo uns Traces aqui aconteceu o que eu pensava…
A thread main é renomeada para Main…
Mas nao consegui entender porque a Thread2 ganho MainWorker e nao apenas Worker… :?
smota
:roll: :roll: :roll: … alguém consegue explicar?
Eu li a JLS, mas não ficou esclarecido … fui ver o fonte da classe thread e o nome é setado simplesmente this.name = name.toCharArray(); e depois o getName só return String.valueOf(name); :shock:
Luiz_Henrique_Coura
A chamada ao método a.run() é executada antes da Thread disparada pelo contrutor da classe A. Sendo assim ele pega o nome da Thread q à chamou, ou seja, a classe TesteRunnable.
Olha o teste:
publicclassTesteRunnable{publicstaticvoidmain(Stringargs[]){Thread.currentThread().setName("Main");Runnablea=newA("Worker");a.run();}}classAimplementsRunnable{A(Stringnome){System.out.println("Criando classe A");newThread(this,nome).start();}publicvoidrun(){//Retirem o comentário desse trecho q vcs verão o resultado com //maior clareza.//if(Thread.currentThread().getName().equals("Worker")){// System.out.println("\nExecutando Classe A ");//}//Basta colocar println que vcs verão q ninguém mudou de nome, //é apenas seguido uma ordem na execução das ThreadsSystem.out.println(Thread.currentThread().getName());}}
Ou seja, primeiro ele imprime "Main" da Thread principal e depois ele executa a Thread A, a string "Worker".