Ezxecutar uma thread sem implementar runnable [Resolvido]

Galera,
eu posso executar uma thread sem criar um objeto runnable nesse caso? Pois estou executando o código, porém não imprime nada na tela.

[code]class MyThread1 extends Thread {
void rum() {
System.out.println(“nome da Thread dada pela JVM:” + Thread.currentThread().getName());
for(int i = 0; i < 5; i++) {
System.out.println(“Executando minha primeira Thread.”);
}
}

public static void main(String[] args) {
	MyThread1 mt = new MyThread1();
	mt.start();
}

}[/code]

eh pq o seu metodo esta escrito errado, eh “run” que deve se chamar e não “rum”

Esse já estava pensando na sexta-feira! :slight_smile: :slight_smile:

:smiley:

Como Thread implementa Runnable, você continua implementando um Runnable. :slight_smile:
Entretanto, sobrescrever Thread não é considerada uma boa prática. O ideal é implementar a interface Runnable diretamente.

Dica. Sempre que sobrescrever um método, de qualquer classe, coloque a anotação @Override em cima desse método. Assim, se vc cometer um erro de grafia (como ocorreu nesse seu código), o compilador vai saber que sua intenção era sobrescrever alguma coisa, e vai te avisar que o método em questão não sobrescreve nada.

[code]//Esse código agora dá erro, pois o compilador sabe que a intenção era
//sobrescrever run() e não criar um novo método chamado rum().
class MyThread1 extends Thread {
@Override
void rum() {
System.out.println("nome da Thread dada pela JVM:" + Thread.currentThread().getName());
for(int i = 0; i < 5; i++) {
System.out.println("Executando minha primeira Thread.");
}
}

public static void main(String[] args) {
	MyThread1 mt = new MyThread1();
	mt.start();
}

}[/code]

Isso é ainda mais útil quando você estiver sobrescrevendo suas próprias interfaces e classes. Assim, se você alterar o nome de um método na classe pai, o compilador automaticamente dará erro em todas as classes filhas onde você esquecer de alterar o nome do método também.

Legal, Vini, muito oportuna essa observação.

Às vezes, parece desnecessária a anotação, mas, nesse caso, ela teria se provado bem valiosa :slight_smile:

Valeu.

[quote=ViniGodoy]Como Thread implementa Runnable, você continua implementando um Runnable. :slight_smile:
Entretanto, sobrescrever Thread não é considerada uma boa prática. O ideal é implementar a interface Runnable diretamente.

Dica. Sempre que sobrescrever um método, de qualquer classe, coloque a anotação @Override em cima desse método. Assim, se vc cometer um erro de grafia (como ocorreu nesse seu código), o compilador vai saber que sua intenção era sobrescrever alguma coisa, e vai te avisar que o método em questão não sobrescreve nada.

[code]//Esse código agora dá erro, pois o compilador sabe que a intenção era
//sobrescrever run() e não criar um novo método chamado rum().
class MyThread1 extends Thread {
@Override
void rum() {
System.out.println("nome da Thread dada pela JVM:" + Thread.currentThread().getName());
for(int i = 0; i < 5; i++) {
System.out.println("Executando minha primeira Thread.");
}
}

public static void main(String[] args) {
	MyThread1 mt = new MyThread1();
	mt.start();
}

}[/code]

Isso é ainda mais útil quando você estiver sobrescrevendo suas próprias interfaces e classes. Assim, se você alterar o nome de um método na classe pai, o compilador automaticamente dará erro em todas as classes filhas onde você esquecer de alterar o nome do método também.[/quote]
Valeu vini, eu ja tinha visto esse @override mas não sabia pra que servia.
Agora eu estava vendo no livro da katy realmente é melhor implementar runable.

Mesmo eu corrigindo o metodo run(), ainda ocorre o erro de que eu não implementei runnable. Segue a minha pergunta novamente, "eu posso executar uma thread sem criar um objeto runnable nesse caso, ou sem implementar Runnable, extendendo apenas Thread??

A classe Thread implementa Runnable. Isso responde sua pergunta?

A classe Thread implementa Runnable. Isso responde sua pergunta?[/quote]

Veja bem Brrodo, li no livro da katy e o que entendi: Para executar, startar, enfim, uma Thread, temos que ter um objeto Runnable(trabalho) e um objeto Thread (trabalhador). Uma Thread necessita de ambos para existir uma nova pilha de métodos. Para criar um OBJETO Thread podemos exetender Thread (não aconselhavel) ou implementar Runnable. Agora a respota para a minha pergunta: 'Para executar uma Thread ou, criar uma nova pilha de métodos, é necessário de pelomenos um objeto THread e um Objeto Runnable."
OBS: Como Runnable é uma interface com o método run();, precisamos sobrescreve-lo, lembre-se: Sobrescrever o método run() de Runnable, pois se extendermos a classe Thread que possui um método run() ja sobrescrito da interface Runnable, ele será executado na pilha normalmente e não será criada uma nova pilha.

Pessoal, se eu escrevi alguma besteira me corrijam por favor, pois foi isso que entendi até o momento, as vezes eu não soube compriender na respostas anteriores dos nossos amigos.

Lembrando que ainda não concluí o capítulo de Thread.

O erro que ocorre, provavelmente decorre do fato de vc não implementar o método run() corretamente. O correto é:

você esqueceu do “public”.

vlw

[quote=programadora]O erro que ocorre, provavelmente decorre do fato de vc não implementar o método run() corretamente. O correto é:

você esqueceu do “public”.

vlw[/quote]

É, mais aí teríamos erro de compilação.

Erro de compilação porque? O código do diegohsi funciona perfeitamente após a mudança que sugeri.

Teríamos erro de compilação caso o problema fosse o modificador de acesso do método “run()” estar em “default” e não “public” e não o erro de que eu “não foi implementado runnable”.