2013-09-06 2 views
3

Pouvons-nous utiliser la méthode d'exécution directe comme dans la classe ci-dessous. Il produit le même résultat que lorsque nous utilisons t1.start(); Y a-t-il une raison derrière l'utilisation de la méthode start pour invoquer run?Méthode d'exécution des threads

public class runcheck extends Thread{ 

    public void run(){ 

     System.out.println(" i am run"); 

    } 
    public static void main(String args[]){ 

     runcheck as = new runcheck(); 
     Thread t1 = new Thread(as); 
     t1.run(); 

    } 

} 
+2

La pratique actuelle dit que 'runcheck' ne devrait pas étendre' Thread », mais simplement mettre en œuvre« Runnable ». (Généralement pour la séparation des problèmes - vous n'avez généralement pas de priorité sur les autres méthodes 'Thread'.) – millimoose

Répondre

8

Oui, mais il s'exécutera dans le même thread. Cela équivaut à appeler une méthode sur un objet normal.

start() est ce que vous voulez. Il appelle une méthode native qui génère en fait un système d'exploitation Thread pour exécuter le code dans run().

+1

Oui, run est juste là pour dire à l'objet Thread où commencer l'exécution de ce thread. En appelant "run", vous appelez littéralement une méthode. Implémenter Runnable (ou étendre le Thread), ne donne aucun pouvoir magique à la méthode. – Cruncher

0

Oui, vous pouvez invoquer run directement à partir de la méthode main, dans ce cas, la méthode main et run méthode s'exécute un après l'autre.

Commander

main -> t.run() -> main - Seulement 1 Discussion

Mais si vous appelez la méthode start sur l'instance t1, la méthode et la méthode runmain exécute en parallèle.

main -> t.start() -> main - 1er fil

run() - 2ème fil.

1

De this:

start() appelle run() de manière asynchrone (non bloquant)

tout en appelant run() entraîne directement appel synchrone (blocage)