Maison > Java > javaDidacticiel > le corps du texte

Comment implémenter des threads en Java ? Méthode d'implémentation du thread Java (image et texte)

不言
Libérer: 2018-09-17 15:18:24
original
2072 Les gens l'ont consulté

Ce que cet article vous apporte, c'est comment implémenter les threads en Java ? La méthode d'implémentation des threads Java (images et textes) a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer, j'espère qu'elle vous sera utile.

Processus et threads

Dans les systèmes d'exploitation traditionnels, le concept de base est « processus », et un processus est une abstraction d'un programme en cours d'exécution.
L'existence de processus rend le « parallélisme » possible. Dans un système d'exploitation, plusieurs processus sont autorisés à s'exécuter, et ces processus « semblent » s'exécuter en même temps.
Si notre ordinateur exécute plusieurs processus tels qu'un navigateur Web, un client de messagerie, un logiciel de messagerie instantanée tel que QQ WeChat, etc., nous avons l'impression que ces processus s'exécutent tous en même temps. Supposons que cet ordinateur en soit équipé de plusieurs. CPU ou CPU multicœur, alors ce phénomène de plusieurs processus en parallèle n'est peut-être pas du tout surprenant. Il est tout à fait possible d'attribuer un CPU à chaque processus, réalisant ainsi un parallélisme multi-processus.
Cependant, en fait, lorsque l'ordinateur ne dispose que d'un seul processeur, cela peut aussi donner aux humains l'impression que plusieurs processus s'exécutent en même temps. Mais les sentiments humains sont souvent vagues et imprécis. Le fait est que, comme la vitesse de calcul du CPU est très rapide, il peut basculer rapidement entre les processus. À un certain moment, le CPU ne peut exécuter qu'un seul processus, mais en une seconde, il peut basculer rapidement entre les processus, permettant ainsi aux utilisateurs de le faire. Crée l'illusion que plusieurs processus s'exécutent en même temps.
Dans le système d'exploitation, pourquoi la notion de thread est-elle dérivée du processus ?

  1. Étant donné que pour certains processus, plusieurs activités se produiront à l'intérieur, certaines activités peuvent se bloquer à un certain moment, et certaines activités ne le seront pas, si ces activités sont séparées par des threads. Si vous les activez fonctionner en parallèle, il sera plus facile de concevoir le programme.

  2. Les threads sont plus légers que la création de processus et consomment moins de performances

  3. Si un processus nécessite à la fois des calculs CPU et un traitement d'E/S, avoir plusieurs les threads permettent à ces activités de se chevaucher, accélérant ainsi l'exécution de l'ensemble du processus.

Chaque processus dispose d'un espace d'adressage mémoire indépendant dans le système d'exploitation. Tous les threads créés par le processus partagent cette mémoire. Un système d'exploitation prenant en charge le multithread permettra aux threads de fonctionner comme des threads. la plus petite unité de planification du processeur. Les tranches de temps CPU sont réparties entre différents threads.

Méthodes d'implémentation possibles des threads

Fondamentalement, les systèmes d'exploitation traditionnels prennent en charge les threads et fournissent également des implémentations de threads. Afin de faire face aux différences entre les différents matériels et systèmes d'exploitation, le langage Java fournit une abstraction unifiée des opérations de thread. En Java, nous utilisons la classe Thread pour représenter un thread.
L'implémentation spécifique de Thread peut avoir différentes méthodes d'implémentation :

Utiliser les threads du noyau pour implémenter

Les threads du noyau sont des threads pris en charge par le noyau du système d'exploitation. Il existe une table de threads dans le noyau. pour Enregistrez tous les threads du système. Lors de la création ou de la destruction d'un thread, des appels système sont requis, puis la table des threads est mise à jour dans le noyau. Le blocage des threads du noyau et d'autres opérations impliquent tous des appels système. Les appels système sont relativement coûteux et impliquent un va-et-vient entre le mode utilisateur et le mode noyau. De plus, il existe un planificateur de threads à l'intérieur du noyau qui détermine à quel thread la tranche de temps CPU doit être allouée.
Les programmes n'exploitent généralement pas directement le thread du noyau, mais utilisent une interface de haut niveau du thread du noyau, un processus léger. La relation entre les processus légers et les threads du noyau est de 1:1. Chaque processus léger est pris en charge par un thread du noyau.

Comment implémenter des threads en Java ? Méthode dimplémentation du thread Java (image et texte)

Dans la figure ci-dessus, LWP fait référence à un processus léger, c'est-à-dire un processus léger, KLT fait référence à un thread au niveau du noyau, c'est-à-dire un noyau ; fil de discussion.

Utiliser des threads utilisateur pour implémenter

Les threads utilisateur sont des bibliothèques de threads implémentées par le programme ou le langage de programmation lui-même, et le noyau du système ne peut pas détecter l'existence de ces threads. L'établissement, la synchronisation, la destruction et la planification des threads utilisateur sont tous effectués en mode utilisateur sans l'aide du noyau et sans appels système. L'avantage est que le fonctionnement des threads est très efficace. Dans ce cas, le rapport processus/threads utilisateur est de 1:N.

Comment implémenter des threads en Java ? Méthode dimplémentation du thread Java (image et texte)

Les threads en mode utilisateur rencontreront des difficultés lorsqu'ils seront confrontés à la façon de bloquer les threads. Le blocage d'un thread en mode utilisateur bloquera également l'ensemble du processus multithread. perd son sens. En raison du manque de prise en charge du noyau, de nombreuses tâches nécessitant l'utilisation du noyau, telles que le blocage et la réactivation des threads, le mappage des threads dans un environnement multi-CPU, etc., nécessitent la mise en œuvre de programmes utilisateur, ce qui est extrêmement difficile à mettre en œuvre. .

Utilisez une implémentation hybride de threads utilisateur et de threads noyau

Dans cette implémentation hybride, il existe à la fois des threads utilisateur et des threads noyau. Les opérations de création et de changement de threads en mode utilisateur sont toujours très efficaces, et les threads implémentés en mode utilisateur facilitent l'augmentation de la taille des threads. Les fonctions qui nécessitent la prise en charge du noyau du système d'exploitation sont implémentées via les threads du noyau, telles que le mappage vers différents processeurs, le blocage et le réveil des threads de traitement, ainsi que la planification des threads du noyau. Cette implémentation utilisera toujours le processus léger LWP, qui constitue le pont entre les threads utilisateur et les threads du noyau.

Comment implémenter des threads en Java ? Méthode dimplémentation du thread Java (image et texte)

Implémentation des threads Java

Avant JDK1.2, les threads Java étaient implémentés à l'aide de threads utilisateur. Dans JDK1. Cela signifie que Java a été implémenté à l'aide du modèle de thread pris en charge nativement par le système d'exploitation. L'implémentation du modèle de thread Java dépend principalement du système d'exploitation. Pour Oracle JDK, le modèle de thread sous Windows et Linux est implémenté de manière individuelle, c'est-à-dire qu'un thread Java est mappé à un processus léger (thread du noyau). Sur la plateforme Solaris, Java prend en charge les modèles de thread 1:1 et N:M.

Blocage et attente des threads

Le statut des threads en Java est le suivant : Nouveau, Exécutable, En attente, TimedWaiting, Bloqué, Terminé.

Comment implémenter des threads en Java ? Méthode dimplémentation du thread Java (image et texte)

  • NOUVEAU : le fil de discussion est initialement créé, mais ne s'exécute pas

  • RUNNABLE : Thread en cours d'exécution, mais ne consommant pas nécessairement de CPU

  • BLOCKED : le thread attend qu'un autre thread libère le verrou

  • WAITING : le thread exécuté wait, join , méthode LockSupport.park()

  • TIMED_WAITING : le fil appelle sleep, wait, join, LockSupport.parkNanos() et d'autres méthodes différentes de l'état WAITING. avoir des paramètres de temps de représentation.

Une différence importante entre Bloqué et En attente est qu'un thread à l'état Bloqué attend d'acquérir un verrou exclusif. Par exemple, un thread attend d'entrer dans une section critique entourée du. mot-clé synchronisé , il passe à l'état Bloqué. L'état d'attente attend d'être réveillé ou attend pendant un certain temps.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal