J'ai récemment vu une question avec le code comme suit:
La copie de code est la suivante:
public static void main (String args []) {
Thread t = nouveau thread () {
public void run () {
pong ();
}
};
t.run ();
System.out.println ("ping");
}
statique void pong () {
System.out.println ("pong");
}
Question, quel sera le résultat de la sortie?
Je l'ai couru plusieurs fois, et il s'est avéré être Pong Ping. Plus tard, j'ai finalement découvert le point de clé, l'objet de thread T, qui n'appelle pas la méthode start (), mais la méthode run (). Plus tard, j'ai ouvert le débogage du mode Breakpoint et j'ai constaté que lorsque j'ai appelé la méthode Run (), il n'y avait qu'un seul thread dans l'ensemble du programme. Ce n'est qu'alors que nous pouvons rivaliser avec le thread principal du CPU, et il peut y avoir plusieurs résultats, mais comme la méthode de sortie suivante est exécutée rapidement, c'est essentiellement la sortie de "ping-pong".
La différence entre run () et start () est donc:
Run () est une méthode définie dans l'interface Runnable, qui est de permettre aux programmeurs clients d'écrire leur propre code fonctionnel dans cette méthode. Il n'y a pas de différence entre appeler directement et appeler vos propres méthodes de membre par des classes ordinaires.
START () est un drapeau que le thread commence à exécuter.
Je pense donc que si vous voulez écrire un fil séparé, il est préférable de hériter du fil. .