2012-01-21 11 views
10

Soy nuevo en la programación de subprocesos en Java y de ahí esta pregunta básica. (Lo comprobé, pero no pude encontrar esta pregunta previamente)Escenario de ampliación de la clase Thread e implementación de la interfaz Runnable

He leído que los hilos pueden crearse heredando la clase Thread o implementando la interfaz Runnable. Vi un código que tenía ambos en la misma clase.

public class ThreadExample extends Thread implements Runnable { 
} 

Me preguntaba qué tipo de situación querría esto y si hay alguna ventaja para esto, lo que es.

Respuesta

11

extiende Thready implementar Runnable es inútil (Thread ya implementa Runnable). Usted casi siempre desea implementar Runnable (y no extender Thread). Eso le da la flexibilidad de usar un Thread directamente (no recomendado) o usar una de las implementaciones más recientes de ThreadPool en java.util.concurrent (recomendado).

4

No, no hay ninguna ventaja de utilizar este enfoque, ya que la clase Thread implementa la interfaz Runnable. Entonces, si su clase extiende la clase Thread. Significa que también está implementando la interfaz de Runnable.

http://www.developerfusion.com/pix/articleimages/may05/javathread3.jpg

4

en esta situación específica que no es muy útil, ya que otros críticos han explicado que es bastante obvio que Thread ya implementa Runnable.

En algunos casos, "obviedad" puede ser útil, sin embargo, al igual que un "recordatorio" para el usuario de su clase: si tiene una bastante grande jerarquía de super-clases e interfaces, con varios niveles de herencia (algunos de ellos en bibliotecas de terceros), podría ser útil como ayudante declarar que una clase implementa una interfaz específica, aunque lo implemente por definición porque su superclase ya lo implementa o implementa una de las subclase de esa interfaz.

Es especialmente útil con las interfaces de marcador (algunas personas podrían objetar que no deberían usarse en absoluto, y son malas prácticas, a veces no controla el entorno por completo), es decir, interfaces sin implementación real y simplemente diseñado para marcar su objeto elegible para una función especial (por ejemplo, Cloneable). En tal caso, marcar cada una de las clases permitidas aunque sus padres ya sean elegibles puede ser más explícito, por lo que es más útil.

-1

Interfaz ejecutable significa asignar un trabajo a muchos hilos mientras que la clase Thread, cada uno de los hilos tiene un objeto único asociado.

+0

esto de ninguna manera es ni siquiera remotamente correcto –

+0

Lea [¿Cómo escribo una buena respuesta?] (Http://stackoverflow.com/help/how-to-answer) antes de intentar responder más preguntas. –

-1

La implementación de la interfaz ejecutable sería preferible cuando se necesita más flexibilidad para extender otras clases base.

+0

Lea [¿Cómo escribo una buena respuesta?] (Http://stackoverflow.com/help/how-to-answer) antes de intentar responder más preguntas. –

+0

Ya lo leí. Por favor dígame: ¿qué pasa en mi respuesta? – rashedcs

Cuestiones relacionadas