Thread

10 respostas
F

Boa Tarde pessoal,

Alguem poderia me esclarecer a seguinte questÃo:

Given that a static method doIt() in the class Work represents work to be done, which block of code will succed in starting a new Thread that will do the work?

[b]Select the one correct answer.

a)[/b]

Runnable r = new Runnable() {

public void run() {

Work.doIt();

}

};

Thread t = new Thread®;

t.start();
b) 

Thread t = new Thread() {

public void start() {

Work.doIt();

}

};

t.start();
c)  

Runnable r = new Runnable() {

public void run() {

Work.doIt();

}

};

r.start();
d)

Thread t = new Thread(new Work());

t.start();
Runnable r = new Runnable() {
  public void run() {
    Work.doIt();   
  }
};
r.run();

Eu concordo que a letra © tá fora pq o método start() nem existe naquela instância, visto que não trata-se de uma Thread, a qual implementa Runnable e implementa o método start()

a (D) tá fora de nexo, pois nem se sabe se Work é Runnable ou Thread

letra (E) acho q tb tá fora pq num gera em runtime uma nova Thread e sim executa o método run como em uma classe qualquer…

Bom, e segundo a resposta do livro a letra certa é (A), porém lá vai minha dúvida, pq a (B) tb não está certa?!?!?!?! Qual a diferença de (A) e (B)???[/u]

10 Respostas

J

eu creio q a unica q esta certa é a (B)
pois a resposta (A) ele esta instanciando uma Interface Runnable (new Runnable())… uma coisa impossivel. nao iria nem compilar. :???:

F

o pior é q compila sim e gera um nova Thread qdo faz Thread t = new Thread®;

o q vc falou eu concordo, pois uma Interface não pode ser instanciada, mas nesse caso eu acho q implementou o método run(), por isso não é um erro de compilação. Se fosse erro , poliformisfo entrava em extinção

E

“javaquest”:
eu creio q a unica q esta certa é a (B)
pois a resposta (A) ele esta instanciando uma Interface Runnable (new Runnable())… uma coisa impossivel. nao iria nem compilar. :???:

grande parte dos exemplos q tem no sun “The javaTutorial” instanciao a interface Runable. sem problemas.

J

realmente nao tinha percebido q ele estava implementando o metodo run no momento da criacao …

F

mas voltando ao assunto…

qual q diferencia de (A) e (B)?

as duas criam uma Thread e executando do método doIt() como desejado!!!

R

a reposta “A” é a correta…
o problema com a “B” é que ela não starta corretamente uma no nova thread… o método start foi sobrescrito e não starta a thread, simplesmente executa Work.doIt()

té+

F

isso quer dizer a a thread de (B) ñ executará como uma thread de forma independente e sim linearmente, ou seja, o codigo depois dessa thread só será executado qdo o método doIt() terminar?

F

A e B,

é possível instanciar uma interface quando se trata se classes anonimas,
na verdade estamos instaciando uma classe anonima que vai implementar
a interface , que parece estar sendo instanciada.É meio estranho e diferente essa forma de criar uma referencia a uma classe, mas eh possivel.

Na letra A, o cria-se uma classe anonima, que implementa a interface Runnable, e r tem uma referencia a esse objeto da classe anonima…
Como a interface Runnable obriga a implementacao do metodo run em classes contretas, logo no metodo run, existe uma chamada ao metodo
doIt, que ira realizar o trabalho.
Logo depois do fim da classe anonima , cria-se uma Thread t, passando um objeto que implemente a Runnable, nesse caso o “r”.
Em seguida a thread t inicializa seu ciclo de vida , e com o metodo start,
dispara a execucao do “run” de r. Perfeitamente Valido

Jah na letra B,

houve uma overriding do metodo start, que esta implementado da sua maneira na classe concreta Thread, logo , esse metodo start que foi substituido não chama o run(), logo nao inicia um novo segmento…
mas o trabalho eh realizado(Work.doIt():wink:

A letra C, naum rola pq Runnable naum tem o metodo start();

A letra D, pode ate rolar , mas naum temos 100% de certeza porque naum sabemos a implementacao da classe Work, se ela implements Runnable e ter o metodo run(), ok, ira compilar, MAS naum sabemo , entao , eh falso

T

Atentem para o enunciado…“which block of code will succed in starting a new Thread that will do the work?”

Ele quer a opção que faça o start de uma nova Thread…

A “starta” uma nova Thread…
B não “starta” uma nova Thread pq o método start() foi sobrescrito…

Resposta: A

Abraço.

F

exatamente TAZ, o enunciado deve ser bem lido! :slight_smile:

Criado 18 de fevereiro de 2005
Ultima resposta 22 de fev. de 2005
Respostas 10
Participantes 6