logo

Multithreading en Java

  1. Multithreading
  2. Multitâche
  3. Multitâche basé sur les processus
  4. Multitâche basé sur des threads
  5. Qu'est-ce que le fil

Multithreading dans Java est un processus d'exécution de plusieurs threads simultanément.

Un thread est un sous-processus léger, la plus petite unité de traitement. Multitraitement et multithreading, tous deux sont utilisés pour réaliser le multitâche.

botte de printemps

Cependant, nous utilisons le multithreading plutôt que le multitraitement car les threads utilisent une zone de mémoire partagée. Ils n'attribuent pas de zone mémoire séparée, ce qui économise de la mémoire et le changement de contexte entre les threads prend moins de temps que le processus.

Java Multithreading est principalement utilisé dans les jeux, l'animation, etc.


Avantages du multithreading Java

1) Il ne bloque pas l'utilisateur car les threads sont indépendants et vous pouvez effectuer plusieurs opérations en même temps.

2) Vous peut effectuer de nombreuses opérations ensemble, ce qui permet de gagner du temps .

3) Les fils sont indépendant , cela n'affecte donc pas les autres threads si une exception se produit dans un seul thread.


Multitâche

Le multitâche est un processus d'exécution simultanée de plusieurs tâches. Nous utilisons le multitâche pour utiliser le processeur. Le multitâche peut être réalisé de deux manières :

  • Multitâche basé sur les processus (multitraitement)
  • Multitâche basé sur les threads (multithreading)

1) Multitâche basé sur les processus (multitraitement)

  • Chaque processus a une adresse en mémoire. En d’autres termes, chaque processus alloue une zone mémoire distincte.
  • Un processus est lourd.
  • Le coût de la communication entre les processus est élevé.
  • Passer d'un processus à un autre nécessite un certain temps de sauvegarde et de chargement registres , cartes mémoire, mise à jour des listes, etc.

2) Multitâche basé sur les threads (multithreading)

  • Les threads partagent le même espace d’adressage.
  • Un fil est léger.
  • Le coût de la communication entre les threads est faible.

Remarque : Au moins un processus est requis pour chaque thread.

Qu'est-ce que le fil en Java

Un thread est un sous-processus léger, la plus petite unité de traitement. Il s'agit d'une voie d'exécution distincte.

Les threads sont indépendants. S'il y a une exception dans un thread, cela n'affecte pas les autres threads. Il utilise une zone de mémoire partagée.

Multithreading Java

Comme le montre la figure ci-dessus, un thread est exécuté à l'intérieur du processus. Il y a un changement de contexte entre les threads. Il peut y avoir plusieurs processus à l'intérieur du système d'exploitation, et un processus peut avoir plusieurs threads.

Remarque : à la fois, un seul thread est exécuté.

Classe de thread Java

Java fournit Classe de fil de discussion pour réaliser la programmation des threads. La classe Thread fournit constructeurs et des méthodes pour créer et effectuer des opérations sur un thread. La classe de thread s'étend Classe d'objet et implémente l'interface Runnable.

Méthodes de thread Java

S.N. Modificateur et type Méthode Description
1) vide commencer() Il est utilisé pour démarrer l’exécution du thread.
2) vide courir() Il est utilisé pour effectuer une action pour un thread.
3) vide statique dormir() Il met un thread en veille pendant la durée spécifiée.
4) Sujet statique courantThread() Il renvoie une référence à l'objet thread en cours d'exécution.
5) vide rejoindre() Il attend qu'un fil meure.
6) int obtenirPriorité() Il renvoie la priorité du thread.
7) vide définir la priorité() Cela change la priorité du thread.
8) Chaîne getName() Il renvoie le nom du fil.
9) vide setName() Cela change le nom du fil.
dix) long getId() Il renvoie l'identifiant du thread.
onze) booléen est vivant() Il teste si le thread est vivant.
12) vide statique rendement() Cela provoque la pause de l'objet thread en cours d'exécution et permet à d'autres threads de s'exécuter temporairement.
13) vide suspendre() Il est utilisé pour suspendre le fil.
14) vide CV() Il permet de reprendre le fil suspendu.
quinze) vide arrêt() Il est utilisé pour arrêter le fil.
16) vide détruire() Il est utilisé pour détruire le groupe de threads et tous ses sous-groupes.
17) booléen estDémon() Il teste si le thread est un thread démon.
18) vide setDaemon() Il marque le thread comme démon ou thread utilisateur.
19) vide interrompre() Cela interrompt le fil.
vingt) booléen est interrompu() Il teste si le thread a été interrompu.
vingt-et-un) booléen statique interrompu() Il teste si le thread en cours a été interrompu.
22) entier statique actifCount() Il renvoie le nombre de threads actifs dans le groupe de threads du thread actuel.
23) vide checkAccess() Il détermine si le thread en cours d'exécution est autorisé à modifier le thread.
24) booléen statique holdLock() Il renvoie vrai si et seulement si le thread actuel détient le verrou du moniteur sur l'objet spécifié.
25) vide statique dumpStack() Il est utilisé pour imprimer une trace de pile du thread actuel dans le flux d'erreurs standard.
26) StackTraceElement[] getStackTrace() Il renvoie un tableau d'éléments de trace de pile représentant le vidage de pile du thread.
27) entier statique énumérer() Il est utilisé pour copier le groupe de threads de chaque thread actif et son sous-groupe dans le tableau spécifié.
28) Thread.State obtenirÉtat() Il est utilisé pour renvoyer l’état du thread.
29) Groupe de discussions getThreadGroup() Il est utilisé pour renvoyer le groupe de threads auquel appartient ce thread
30) Chaîne àChaîne() Il est utilisé pour renvoyer une représentation sous forme de chaîne de ce thread, comprenant le nom, la priorité et le groupe de threads du thread.
31) vide notifier() Il est utilisé pour donner la notification à un seul thread qui attend un objet particulier.
32) vide notifierTout() Il est utilisé pour donner la notification à tous les threads en attente d'un objet particulier.
33) vide setContextClassLoader() Il définit le contexte ClassLoader pour le Thread.
3.4) Chargeur de classe getContextClassLoader() Il renvoie le contexte ClassLoader pour le thread.
35) Thread statique.UncaughtExceptionHandler getDefaultUncaughtExceptionHandler() Il renvoie le gestionnaire par défaut invoqué lorsqu'un thread se termine brusquement en raison d'une exception non interceptée.
36) vide statique setDefaultUncaughtExceptionHandler() Il définit le gestionnaire par défaut invoqué lorsqu'un thread se termine brusquement en raison d'une exception non interceptée.
Savez-vous
  • Comment effectuer deux tâches par deux threads ?
  • Comment effectuer du multithreading par classe anonyme ?
  • Qu'est-ce que le planificateur de threads et quelle est la différence entre la planification préemptive et le découpage temporel ?
  • Que se passe-t-il si nous démarrons un fil de discussion deux fois ?
  • Que se passe-t-il si nous appelons la méthode run() au lieu de la méthode start() ?
  • Quel est le but de la méthode join ?
  • Pourquoi JVM met fin au thread démon s'il ne reste aucun thread utilisateur ?
  • Qu'est-ce que le crochet d'arrêt ?
  • Qu’est-ce que la collecte des déchets ?
  • Quel est le but de la méthode finalize() ?
  • Que fait la méthode gc() ?
  • Qu'est-ce que la synchronisation et pourquoi utiliser la synchronisation ?
  • Quelle est la différence entre la méthode synchronisée et le bloc synchronisé ?
  • Quelles sont les deux manières d’effectuer une synchronisation statique ?
  • Qu’est-ce qu’une impasse et quand peut-elle se produire ?
  • Qu’est-ce que la communication ou la coopération interthread ?
Qu'allons-nous apprendre en multithreading
  • Multithreading
  • Cycle de vie d'un fil
  • Deux façons de créer un fil de discussion
  • Comment effectuer plusieurs tâches par plusieurs threads
  • Planificateur de sujets
  • Dormir un fil
  • Pouvons-nous démarrer un fil de discussion deux fois ?
  • Que se passe-t-il si nous appelons la méthode run() au lieu de la méthode start() ?
  • Rejoindre un fil de discussion
  • Nommer un fil
  • Priorité d'un fil
  • Fil de démon
  • ArrêtHook
  • Collecte des ordures
  • Synchronisation avec méthode synchronisée
  • Bloc synchronisé
  • Synchronisation statique
  • Impasse
  • Communication inter-thread