Extends Thread ou implements Runnable

Por que razão implementar a interface Runnable é melhor do que estender Thread? Sei que implementar a interface Runnable permite que a classe use sua única oportunidade de estender outra classe, mas há alguma vantagem referente à que o método run da classe que implementa a interface Runnable pode acessar métodos private “melhor” do que a classe que estende Thread?

Estender Thread é uma má ideia pq vc quebra um pouco a OO, além de perder uma boa chance de estender uma outra classe mais relevante pro seu negocio. Se eu nao estou esquecendo de nada, acredito que nao exista nenhuma diferenca de performance ou algo do genero.

ok, mais uma:

a chamada de método

Thread.sleep(1500) significa que o Thread será interrompido por exatamente 1,5 segundos ou aproximadamente 1,5 segundos?

Aproximadamente, já que a VM confia no timer do sistema operacional pra isso, e geralmente ele não tem essa precisão toda.

(Se você estiver precisando de uma precisão nesse nível, dê uma olhada no RTJ, Real Time Java)

Aproximadamente … bem, eu jurava que tinha lido isso em algum lugar mas após 10 minutos de pesquisa ainda não encontrei :cry:

De qq modo, tecnicamente qualquer “timer” é aproximado pois é baseado em clock tips do cristal e ele não é exato :shock:

Alguem tem uma resposta que preste?

[]s

ok, é que tinha uma pergunta assim no www.javacertificate.com , eu acertei respondendo (sem ser incisivo, no entanto :? ) aproximadamente e a resposta era essa mesmo :slight_smile:

Fala Marcio, beleza?!

No livro da Kathy Sierra diz que após o tempo do sleep expira, ele sai do estado sleeping, vamos dizer assim e retorna pro runnable. Retornar pro runnable não significa no entanto (ao menos não é garantido) que este thread vai ser o selecionado pra rodar naquele exato momento. De forma que, quando você coloca sleep(1000) por exemplo, o thread vai puxar um ronco por 1s e então voltar ao estado runnable, disputando com as outras threads o direito de rodar. Em outras palavras a thread dorme por pelo menos o tempo descrito no method calling.

Espero ter ajudado,