Question Pourquoi "implémente Runnable" est préféré à "étend Thread"? [dupliquer]


Cette question a déjà une réponse ici:

Le java Fil lui-même implémente un Java Runnable! et selon la plupart des experts sur Internet, implémente Runnable! même si nous ne pouvons pas utiliser utiliser Runnable dans le sens du fil avec la classe Thread!
Alors pourquoi préférons-nous mettre en œuvre Runnable sur prolonger Thread dans les deux cas, le thread réel est déclaré en appelant un Thread méthode mise en œuvre (c'est-à-dire start() ou run()) bien qu'en cas de Thread nous n'allons pas vraiment "étendre" la fonctionnalité de Thread en contournant simplement la run() méthode?

Je m'excuse si je semble confus ..!


24
2018-03-18 07:10


origine


Réponses:


La différence la plus courante est la suivante:

Lorsque vous prolongez la classe Thread, vous ne pouvez pas étendre d'autres classes dont vous avez besoin. (Comme vous le savez, Java n'autorise pas l'héritage de plusieurs classes). Lorsque vous implémentez Runnable, vous pouvez enregistrer un espace pour que votre classe puisse étendre toute autre classe à l'avenir ou maintenant.

Cependant, la différence significative est.

Lorsque vous prolongez la classe Thread, chacun de vos threads crée un objet unique et s'y associe. Lorsque vous implémentez Runnable, il partage le même objet avec plusieurs threads.

Vérifie ça: http://manikandanmv.wordpress.com/tag/extends-thread-vs-implements-runnable/


64
2018-03-18 07:15



Si votre classe est extension de la classe Thread alors il devient un seul thread qui hérite des propriétés Classe de threaddonc il sera lourd. (Quand extension de la classe Thread chacun des threads crée un objet unique et s’y associe, mais quand mettre en œuvre Runnable, il partage le même objet avec plusieurs threads).

Si votre classe est Implémentation de l'interface Runnable alors vous ne remplacez que le run() .Alors cette instance crée un distinct Thread et chaque thread s'exécute séparément mais pas en tant que thread unique dans votre programme. Une autre chose, depuis Java ne supporte pas héritage multiple, si tu implémenter le Runnable vous éviterez les problèmes d'extension multiple, donc si vous implémentez Interface runnable vous pouvez étendre toute classe dont vous avez besoin autre que Fil classe.


6
2018-03-18 07:16



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


4
2018-03-18 07:14



Java n'autorise qu'un seul héritage, ce qui signifie que si vous héritez de Thread vous ne pourrez pas hériter d'une autre classe. La mise en œuvre du Runnable l'interface n'a pas cette limitation, car votre classe est autorisée à implémenter un nombre quelconque d'interfaces.


1
2018-03-18 07:15



vous semblez vraiment confus. En tout cas, une raison pour laquelle je sais que nous pouvons obtenir les mêmes fonctionnalités en utilisant Runnable, donc nous devrions y aller car si nous allons implémenter Runnable alors nous pouvons étendre d'autres classes ce qui n'est pas possible si nous étendons la classe Thread


-3
2018-03-18 07:23