Ok, sé que las dos formas estándar para crear un nuevo hilo y ejecutarlo en Java:Java - Método de llamada al inicio en el hilo: ¿cómo se dirige a la ejecución de la interfaz de Runnable()?
Implementar
Runnable
en una clase, definarun()
método, y pasar una instancia de la clase a un nuevoThread
. Cuando se llama al métodostart()
en la instancia de subproceso, se invoca el método de ejecución de la instancia de clase.Que la clase deriva de
Thread
, por lo que puede reemplazar el métodorun()
y luego, cuando se llama al método de una nueva instanciastart()
, la llamada se encamina al método reemplazado.
En ambos métodos, básicamente, una nueva Thread
objeto se crea y su método de inicio invocado. Sin embargo, mientras que en el segundo método, el mecanismo de la llamada que se enruta al método definido por el usuario run()
es muy claro, (es un polimorfismo en tiempo de ejecución simple en juego), no entiendo cómo la llamada al método start()
en el objeto Thread se enruta al método run()
de la clase que implementa la interfaz Runnable
. ¿La clase Thread
tiene un campo privado de Tipo Runnable
que comprueba primero y, si está configurada, invoca el método de ejecución si se establece en un objeto? ese sería un extraño mecanismo IMO.
¿Cómo se deriva la llamada a start()
en un subproceso al método de ejecución de la interfaz Runnable
implementada por la clase cuyo objeto se pasa como parámetro al construir el subproceso?
¿Presumiblemente esto a menudo será una referencia a 'este' como en el segundo método? – Finbarr
Esto no responde a su pregunta. Si deriva de Thread, la referencia Runnable, llamada target en la fuente, es nula. –
@Frederik: Sí, pero como eliminaste 'ejecutar', no le pasará nada. – SLaks