t.start()
é o método que a biblioteca fornece para o seu código chamar quando você deseja um novo thread.
r.run()
é o método que você fornece para a biblioteca chamar no novo encadeamento.
A maioria dessas respostas perde a visão geral, que é a de que, no que diz respeito à linguagem Java, não há mais diferença entre t.start()
e do r.run()
que há entre outros dois métodos.
Ambos são apenas métodos. Ambos correm no segmento que os chamou . Ambos fazem o que foram codificados para fazer e, em seguida, retornam, ainda no mesmo segmento, aos seus interlocutores.
A maior diferença é que a maior parte do código para t.start()
é código nativo , enquanto, na maioria dos casos, o código para r.run()
será Java puro. Mas isso não faz muita diferença. Código é código. O código nativo é mais difícil de encontrar e mais difícil de entender quando você o encontra, mas ainda é apenas o código que informa ao computador o que fazer.
Então o que t.start()
faz?
Ele cria um novo encadeamento nativo, organiza a chamada desse encadeamento t.run()
e, em seguida, diz ao sistema operacional para permitir que o novo encadeamento seja executado. Então ele retorna.
E o que r.run()
faz?
O engraçado é que a pessoa que faz essa pergunta é a pessoa que a escreveu . r.run()
faz o que você (ou seja, o desenvolvedor que o escreveu) o projetou para fazer.