web-dev-qa-db-fra.com

Pourquoi "implémente Runnable" est préféré à "étend Thread"?

Le Java Thread lui-même implémente un Java Runnable! Et selon la plupart des experts sur Internet, - implémente Runnable est préférable à étend Thread ! même si nous ne pouvons pas utiliser utiliser Runnable dans le sens de thread sans la classe Thread!
Alors pourquoi préférons-nous implémenter Runnable plutôt que d'étendre Thread puisque dans les deux cas le thread réel est indiqué en appelant une méthode implémentée Thread (ie start() ou run()), bien que dans le cas de Thread, nous n'étendions pas vraiment la fonctionnalité de Thread en remplaçant simplement la méthode run()?

Je m'excuse si cela semble déroutant ..!

25
Tariq

La différence la plus courante est:

Lorsque vous étendez la classe Thread, vous ne pouvez étendre aucune autre classe dont vous avez besoin. (Comme vous le savez, Java ne permet pas d'hériter de plus d'une classe). Lorsque vous implémentez Runnable, vous pouvez enregistrer un espace pour votre classe afin d'étendre toute autre classe à l'avenir ou maintenant.

Cependant, la différence significative est.

Lorsque vous étendez la classe Thread, chacun de vos threads crée un objet unique et l'associe à lui. Lorsque vous implémentez Runnable, il partage le même objet sur plusieurs threads.

Vérifiez ceci: http://manikandanmv.wordpress.com/tag/extends-thread-vs-implements-runnable/

65
Aashray

Une classe ne peut avoir qu'une seule superclasse, mais peut implémenter n'importe quel nombre d'interfaces. En étendant Thread, vous renoncez à la possibilité de sous-classer autre chose.

5
minopret

Java n'autorise que l'héritage unique, ce qui signifie que si vous héritez de Thread, vous ne pourrez hériter d'aucune autre classe. L'implémentation de l'interface Runnable n'a pas cette limitation, car votre classe est autorisée à implémenter n'importe quel nombre d'interfaces.

1
Adi Lester