Application multithread de la série d'exploitation et de maintenance du système

Un thread est un chemin d'exécution de programme et un processus peut contenir plusieurs threads.

La différence entre le parallélisme multithread et la concurrence: le
parallélisme signifie que deux tâches s'exécutent en même temps, nécessitant des ressources de processeur multicœur; La concurrence signifie que les deux tâches demandent à s'exécuter, mais le processeur ne peut accepter que l'exécution d'une tâche, donc la stratégie adoptée est deux tâches À tour de rôle, parce que l'intervalle est court, nous aurons l'impression que les deux tâches se déroulent en même temps. Autrement dit, les performances du processeur requises pour le parallélisme sont plus élevées.

Le principe de fonctionnement des programmes Java:
les commandes Java démarrent la machine virtuelle Java. Démarrer la JVM équivaut à démarrer une application, c'est-à-dire démarrer un processus, qui démarre automatiquement un thread principal, puis le thread principal appelle la méthode principale de une certaine classe. Java démarre au moins le thread de garbage collection et le thread principal, il est donc multi-thread.

Méthode d'implémentation multi-thread 1:
définir la classe pour hériter de Thread;
réécrire la méthode d'exécution;
écrire ce que le nouveau thread fait dans la méthode run;
créer un objet thread;
ouvrir un nouveau thread et la méthode run () sera automatiquement exécutée intérieurement.
Code:

class MyThread extends Thread{
    
    
	public void run(){
    
    
		System.out.println("重写run方法");
	}
}

public static void main(String[] args){
    
    
	MyThread mt = new MyThread();
	mt.start();
}

Méthode d'implémentation multi-thread 2:
définissez la classe pour implémenter l'interface Runnable;
implémentez la méthode run;
écrivez ce que le nouveau thread fait dans la méthode run;
créez un objet de sous-classe Runnable personnalisé;
créez un objet Thread et passez dans Runnable;
appelez le méthode start () pour démarrer Pour les nouveaux threads, la méthode run () de Runnable est automatiquement appelée en interne.
Code:

class MyRunnable implements Runnable{
    
    
	public void run(){
    
    
		System.out.println("重写run方法");
	}
}

public static void main(String[] args){
    
    
	MyRunnable mr = new MyRunnable();
	Thread t = new Thread(mr);
	t.start();
}

La différence entre les deux méthodes:
hériter de Thread, car la sous-classe remplace la méthode run de la classe Thread, lors de l'appel de start, recherchez directement la méthode run de la sous-classe;
lors de l'implémentation de Runnable, la référence de Runnable est passée dans le constructeur, et les variables membres sont mémorisées Il, start () juge en interne si la référence de la variable membre Runnable est vide lors de l'appel de la méthode run. Lorsqu'elle n'est pas vide, compilez pour voir la classe parente s'exécuter, et exécutez pour voir la sous-classe s'exécuter; la
première: vous pouvez utiliser directement les méthodes de la classe Thread, l'application est simple, mais si vous avez déjà une classe parente, vous ne pouvez pas utiliser cette méthode; la seconde: peu importe si la classe de thread que vous définissez vous-même a une classe parente, l'interface peut être implémentée davantage, mais elle ne peut pas utiliser directement les méthodes de la classe Thread, vous devez d'abord l'obtenir.Les objets Thread peuvent être utilisés et le code est plus compliqué.

PS: Digression: En comparant les deux implémentations, on constate que la première est simple mais a des limites d'utilisation; la seconde est complexe mais peut être mise en œuvre davantage. Rien n'est parfait, nous voulons être ouverts sur le monde, chercher un terrain d'entente tout en réservant les différences, être strict avec nous-mêmes et être indulgents avec les autres ~~~ C'est un long chemin à parcourir. . .

Je suppose que tu aimes

Origine blog.csdn.net/langxiaolin/article/details/113834251
conseillé
Classement