... la question dit tout je crois !
Réponses
Trop de publicités?Pris forme le Style de Code Java threads FAQ:
Q: Quelle est la différence entre un thread start() et run() méthodes?
Un: Le départ séparé() et run() méthodes de la classe Thread fournir deux façons de créer un programme multi-threadé. La méthode start() commence l' l'exécution de la nouvelle fil et les appels la méthode run (). La méthode start() retourne immédiatement et le nouveau thread normalement continue jusqu'à ce que le run() méthode retourne.
La classe Thread' méthode run() ne fait rien, afin que les sous-classes doivent remplacer la méthode avec le code de exécuter dans le deuxième thread. Si un Thread est instancié avec un Exécutable argument, le fil de la méthode run() exécute la méthode run() de la L'objet praticable dans le nouveau thread au lieu de cela.
Selon la nature de votre programme multi-threadé, appelant le Fil méthode run() directement, peut donner l' même sortie que des appels via la start() la méthode, mais dans ce dernier cas, l' le code est exécuté dans une nouvelle fil de discussion.
L'exécution d' thread.run()
ne pas créer un nouveau Fil de discussion dans lequel votre code est exécuté... Ça exécute le code dans l' currentThread
à partir de laquelle le thread.run()
code est invoquée.
L'exécution d' thread.start()
crée un nouveau niveau de l'OS thread dans lequel l' run()
méthode est appelée.
Dans essense:
Single Threaded programming ==> Directly calling the `run()` method
Multi Threaded programming ==> Calling the `start()` method
En outre, comme d'autres l'ont mentionné, "essais" semble être la seule conseillé cas où vous peut invoquer run()
directement à partir de votre code.
Espérons que ça aide!
Cela a déjà été fait allusion, mais juste pour être clair: la création d'un nouvel objet Thread uniquement à appeler la méthode run() est inutilement cher et devrait être un grand drapeau rouge. Il serait beaucoup mieux, plus découplée de la conception pour créer un Exécutable impl et soit (un) appel c'est méthode run() directement si c'est le comportement souhaité, ou (b) la construction d'un nouveau Thread avec qui Praticable et démarrer le Thread.
Mieux encore, pour encore plus de découplage, découvrez l' Executor
interface et le cadre dans le JDK 5 ou plus récent. Cela vous permet, en un mot, pour découpler l'exécution de la tâche (l'Exécutable exemple) à partir de la façon dont il est exécuté (l'Exécuteur de la mise en œuvre, qui peut exécuter l'Exécutable dans le Thread en cours, dans un nouveau Thread, à l'aide d'un Fil de discussion existant à partir d'un pool, et autres joyeusetés).