multihilos - runnable java 8
¿Por qué "implementa Runnable" se prefiere sobre "extiende Thread"? (5)
Esta pregunta ya tiene una respuesta aquí:
- “Implementa Runnable” vs “extiende Thread” en Java 41 respuestas
El Java Thread implementa un Java Runnable
! y de acuerdo con la mayoría de los expertos a través de Internet, ¡los implementos Runnable se prefieren sobre Thread ! ¡aunque no podemos utilizar Runnable en el sentido de hilo sin la clase Thread!
Entonces, ¿por qué preferimos implementar Runnable
sobre extender Thread
ya que en ambos casos el thread real se establece al llamar a un método Thread
implementado (es decir, start()
o run()
) aunque en el caso de Thread
no estamos realmente "extendiendo" la funcionalidad de Thread
simplemente anulando el método run()
?
Me disculpo si suena confuso ..!
Java solo permite la herencia única, lo que significa que si hereda de Thread
no podrá heredar de ninguna otra clase. La implementación de la interfaz Runnable
no tiene esta limitación, ya que su clase puede implementar cualquier número de interfaces.
La diferencia más común es:
Cuando extiende la clase Thread, no puede extender ninguna otra clase que necesite. (Como saben, Java no permite heredar más de una clase). Cuando implementa Runnable, puede guardar un espacio para su clase para extender cualquier otra clase en el futuro o ahora.
Sin embargo, la diferencia significativa es.
Cuando extiende la clase Thread, cada uno de sus hilos crea un objeto único y se asocia con él. Cuando implementa Runnable, comparte el mismo objeto con varios subprocesos.
Compruebe esto: http://manikandanmv.wordpress.com/tag/extends-thread-vs-implements-runnable/
Si su clase está extendiendo la clase Thread, entonces se convierte en un solo hilo que hereda las propiedades de la clase Thread , por lo que será pesado. (Al extender la clase Thread, cada uno de los subprocesos crea un objeto único y se asocia con él, pero cuando implementa Runnable , comparte el mismo objeto con varios subprocesos).
Si su clase está implementando la interfaz Runnable, entonces solo anulará run()
. Por lo tanto, esta instancia crea un Thread
separado y cada Thread individual se ejecuta por separado pero no como un Thread pesado en su programa. Otra cosa, ya que Java
no admite la herencia múltiple , si implementa Runnable evitará problemas de extensión múltiple, por lo tanto, si implementa la interfaz Runnable , puede extender cualquier clase que no sea la clase Thread .
Una clase solo puede tener una superclase, pero puede implementar cualquier número de interfaces. Al extender Thread
, renuncias a la oportunidad de subclasificar cualquier otra cosa.
realmente suena confuso. De todos modos, una de las razones es que sé que podemos lograr la misma funcionalidad utilizando Runnable, por lo que deberíamos hacerlo porque si implementamos Runnable, podemos extender otra clase que no es posible si extendemos la clase Thread.