- Multithreading
- Multitâche
- Multitâche basé sur les processus
- Multitâche basé sur des threads
- 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.
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. |
- 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 ?
- 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