Ok, so che le due modalità standard per creare un nuovo thread ed eseguirlo in Java:Java - Chiama per avviare il metodo sul thread: come si dirige verso runnable dell'interfaccia run()?
Implementare
Runnable
in una classe, definirerun()
metodo e passare un'istanza della classe per una nuovaThread
. Quando viene chiamato il metodostart()
sull'istanza thread, viene richiamato il metodo run dell'istanza di classe.Lasciate che la classe derivano da
Thread
, in modo che possa eseguire l'override del metodorun()
e poi, quando il metodostart()
una nuova dell'istanza viene chiamato, la chiamata viene instradata al metodo di override.
In entrambi i metodi, in pratica viene creato un nuovo oggetto Thread
e viene richiamato il suo metodo di avvio. Tuttavia, mentre nel secondo metodo, il meccanismo della chiamata che viene instradato al metodo definito dall'utente run()
è molto chiaro, (è un polimorfismo di runtime semplice in riproduzione), non capisco come chiamare il metodo start()
sull'oggetto Thread viene instradato al metodo run()
della classe che implementa l'interfaccia Runnable
. La classe Thread
ha un campo privato di tipo Runnable
che controlla per primo e se è impostato richiama il metodo run se è impostato su un oggetto? quello sarebbe uno strano meccanismo IMO.
In che modo la chiamata a start()
su un thread viene instradata al metodo di esecuzione dell'interfaccia Runnable
implementata dalla classe il cui oggetto viene passato come parametro durante la costruzione del thread?
Presumibilmente questo sarà spesso un riferimento a "questo" come nel 2o metodo? – Finbarr
Questo non risponde alla sua domanda. Se si deriva da Thread, il riferimento Runnable, chiamato target nell'origine, è nullo. –
@Frederik: Sì, ma dal momento che si esegue l'override di 'run', non accadrà nulla. – SLaks