Implémentez le multi-threading en héritant de la classe Thead :
Avantages : Simple à écrire Si vous avez besoin d'accéder au thread actuel, utilisez-le simplement au lieu d'utiliser la méthode Thead.currentThread().
Inconvénient : étant donné que cette classe de thread a hérité de la classe Thead, elle ne peut pas hériter d'autres classes.
Exemple de code :
Copiez le code comme suit :
paquet org.frzh.thread ;
la classe publique FirstThread étend Thread{
int privé je;
//Réécrivez la méthode run. Le corps de la méthode run est le corps d'exécution du thread.
public void run() {
pour (; je < 100; je++) {
//Lorsque la classe thread hérite de la classe Thread, vous pouvez appeler directement la méthode getName pour obtenir le nom du thread actuel.
//Si vous souhaitez récupérer le fil de discussion actuel, utilisez-le directement
//La méthode getName de l'objet Thread renvoie le nom du thread actuel
System.out.println(getName() + " " + i);
}
}
public static void main (String[] arguments) {
pour (int je = 0; je < 100; i++) {
//Appelle la méthode currentThread de Thead pour obtenir le thread actuel
System.out.println(Thread.currentThread().getName() + " " +i);
si (je == 20) {
nouveau FirstThread().start();
nouveau FirstThread().start();
}
}
}
}
Extrait de résultat en cours d'exécution :
Nous avons constaté que les valeurs de i dans les deux sous-threads ne sont pas continues, ce qui semble incompatible avec ce que nous avons dit sur le partage direct des données par les sous-threads. En fait, nous instancions ici deux sous-threads, chacun avec sa propre variable d'instance i.
Utilisation du multi-threading qui implémente l'interface Runable :
Avantages : La classe thread implémente uniquement l'interface Runable, elle peut donc également hériter d'autres classes ;
Dans ce cas, plusieurs threads peuvent partager un objet cible, il est donc très approprié que plusieurs threads traitent la même ressource, de sorte que le processeur, le code et les données puissent être séparés pour former un modèle clair et une meilleure réflexion orientée objet. .
Inconvénients : La programmation est légèrement compliquée. Si vous souhaitez accéder au thread actuel, vous devez utiliser la méthode Thread.currentThread.
Exemple de code :
Copiez le code comme suit :
paquet org.frzh.thread ;
la classe publique SecondThread implémente Runnable{
int privé je;
@Outrepasser
public void run() {
// TODO Stub de méthode généré automatiquement
pour (; je < 100; je++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
}
public static void main (String[] arguments) {
pour (int je = 0; je < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
si (je == 20) {
SecondThread st = nouveau SecondThread();
new Thread(st, "fil enfant 1").start();
new Thread(st, "fil enfant 2").start();
}
}
}
}
Extrait de résultat en cours d'exécution :
On peut voir que la valeur i à ce moment change continuellement car les threads 1 et 2 partagent la même cible.