Pessoal porque esse codigo imprime Dog e não Cat. Sendo que no Thread é passado o Runnable.
publicclassT{Runnabler=newRunnable(){@Overridepublicvoidrun(){// TODO Auto-generated method stubSystem.out.println("Cat");}};Threadt=newThread(r){publicvoidrun(){System.out.println("Dog");}};voidgo(){t.start();}publicstaticvoidmain(String[]args){newT().go();}}
na verdade vc criou uma subclasse da classe Thread e sobscreveu o metodo run() da mesma, então na minha opnião vc criou uma nova subclasse como se criasse um novo "new" bem eu acho q é isso kkkk so to dando uma opnião e com isso na hora do start(); como é uma nova subclasse ta pegando o run() da sobscrita nao do destino(r) invocando tipo o construtor padrao ou fazendo com que a variavel de instancia Runnable que tem no thread fique null pelo novo new q deu e o start test ela primeiro e veja que é null e use o run() dela msm no caso sobscrito. vai saber realmente nao sei so opnioes
Quando eu sobreescrevi o método run() de thread, o novo thread executou seu método ok.
Mas olhando o exemplo, quando eu passo um runnable para um Thread startar o método run(), como o start() dispara o thread, sendo que nao tem o “target” dentro do método start??
Quando eu sobreescrevi o método run() de thread, o novo thread executou seu método ok.
Mas olhando o exemplo, quando eu passo um runnable para um Thread startar o método run(), como o start() dispara o thread, sendo que nao tem o "target" dentro do método start??
A classe thread, de maneira ultra-simplificada, é assim:
Então, se você sobrescreve o método run() de Thread, aquele if vai pro espaço. Então, o run() do target nunca será chamado.
Se você não sobrescreve, e passa um Runnable como parâmetro, é aquele código que roda. O start() dispara outra thread, que inicia em this.run(). Esse por sua vez, como primeira ação, chama, o run() do target passado no construtor.
Quando eu sobreescrevi o método run() de thread, o novo thread executou seu método ok.
Mas olhando o exemplo, quando eu passo um runnable para um Thread startar o método run(), como o start() dispara o thread, sendo que nao tem o "target" dentro do método start??
A classe thread, de maneira ultra-simplificada, é assim:
Então, se você sobrescreve o método run() de Thread, aquele if vai pro espaço. Então, o run() do target nunca será chamado.
Se você não sobrescreve, e passa um Runnable como parâmetro, é aquele código que roda. O start() dispara outra thread, que inicia em this.run(). Esse por sua vez, como primeira ação, chama, o run() do target passado no construtor.