Maison  >  Article  >  Java  >  Résumé et analyse des connaissances multithread en Java

Résumé et analyse des connaissances multithread en Java

不言
不言original
2018-09-18 17:17:151703parcourir

Le contenu de cet article est un résumé et une analyse des connaissances multithread en Java. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

Présentation du processus

  1. Processus : un programme en cours d'exécution est une unité indépendante pour l'allocation des ressources et les appels par le système.

  2. Un processus est un processus d'exécution dynamique d'un programme sur un ensemble de données.

  3. Un processus se compose généralement de trois parties : un programme, un ensemble de données et un bloc de contrôle de processus.

  4. Chaque processus possède son propre espace mémoire et ses propres ressources système.

  5. Le programme que nous écrivons est utilisé pour décrire les fonctions que le processus veut remplir et comment le réaliser

  6. L'ensemble de données est ce que ; le programme le fait pendant l'exécution. Ressources à utiliser ;

  7. Le bloc de contrôle de processus est utilisé pour enregistrer les caractéristiques externes du processus et décrire le processus de changement d'exécution du processus. utilisez-le pour contrôler et gérer le processus. Il s'agit d'un processus sensible au système. L'identifiant unique existe.

  8. Exemple du processus :

(1) Imaginez qu'un informaticien doté de bonnes compétences culinaires prépare un gâteau d'anniversaire pour sa fille (2) Il a une recette pour faire un gâteau d'anniversaire et dispose des ingrédients nécessaires en cuisine : farine, œufs, sucre, etc.
(3) Dans cette métaphore, la recette du gâteau est le programme
(4) L'informaticien est le processeur du processeur
(5) Les différentes matières premières pour fabriquer le gâteau sont des données d'entrée ;
(6) Le processus est la somme d'une série d'actions au cours desquelles le chef lit la recette, obtient divers ingrédients et cuit le gâteau.
(7) Supposons maintenant que le fils de l'informaticien sorte en pleurant et dise que sa tête a été piqué par une abeille
(8) L'informaticien enregistre ce qu'il a fait selon la recette, et c'est pour sauver le état actuel du processus ;
(9) Sortez ensuite un manuel de premiers secours et suivez les instructions pour traiter la piqûre
(10) A ce moment nous verrons le processeur passer d'un processus à un autre High- ; processus prioritaires ;
(11) Chaque processus a son propre programme (recettes et manuels de premiers secours
(12) Une fois la piqûre d'abeille traitée, l'informaticien revient faire des gâteaux
(13) ; ) Continuez là où il s'est arrêté.

Présentation des threads

L'émergence des threads vise à réduire la consommation de changement de contexte et à améliorer la concurrence du système.

Les threads éliminent le défaut selon lequel un processus ne peut faire qu'une seule chose, rendant ainsi possible la concurrence intra-processus.

Exemple de fil de discussion :

(1) Supposons qu'un programme de texte doive recevoir une saisie au clavier, afficher le contenu à l'écran et enregistrer les informations sur le disque dur.

(2) S'il n'y a qu'un seul processus, cela entraînera inévitablement l'embarras de ne pouvoir faire qu'une seule chose à la fois, ce qui signifie que lors de la sauvegarde, aucune saisie au clavier n'est possible
(3) S'il existe plusieurs processus, chaque processus est responsable d'une tâche ;
(4) Le processus A est responsable de la saisie au clavier, le processus B est responsable de l'affichage du contenu à l'écran et le processus C est responsable de l'enregistrement du contenu sur le disque dur. disk;
(5) La collaboration entre A, B et C implique ici des problèmes de communication de processus, et ils ont tous besoin du même contenu : contenu textuel
(6) Une commutation constante entraînera des pertes de performances.
(7) S'il existe un mécanisme qui permet à A, B et C de partager des ressources
(8) De cette façon, moins de contenu doit être enregistré et restauré pour le changement de contexte
(9 ; ) En même temps, cela peut réduire la perte de performances causée par la communication.
(10) Ce mécanisme est du fil.

Les threads sont également appelés processus légers.

Il s'agit d'une unité d'exécution CPU de base et de la plus petite unité du processus d'exécution du programme.

Composé d'un identifiant de thread, d'un compteur de programme, d'un ensemble de registres et d'une pile

L'introduction de threads réduit la surcharge d'exécution simultanée des programmes et améliore les performances de concurrence du système d'exploitation.

Les threads ne disposent pas de leurs propres ressources système.

La relation entre le processus et le thread

  1. Un processus est une activité en cours d'exécution d'un programme dans l'ordinateur sur une certaine collection de données.

  2. Le processus est l'unité de base de l'allocation et de la planification des ressources dans le système et la base de la structure du système d'exploitation

  3. Un thread est un entité du processus et est l'unité de base de la planification et de la répartition du processeur

  4. Un thread est une unité de base qui est plus petite qu'un processus et peut s'exécuter indépendamment

  5. La relation entre les processus et les threads :

(1) Un thread ne peut appartenir qu'à un seul processus, et un processus peut avoir plusieurs threads, mais il y a au moins un thread

(2) Les ressources sont allouées aux processus, le même processus. Tous les threads partagent toutes les ressources du processus
(3) Le processeur est alloué aux threads, c'est-à-dire que ce qui s'exécute réellement sur le processeur est le thread

Principe de fonctionnement du programme Java

  1. La commande java démarrera la machine virtuelle Java, c'est-à-dire démarrer la JVM, ce qui équivaut au démarrage d'une application, c'est-à-dire démarrer un processus ;

  2. Le processus démarrera automatiquement un thread principal

  3. Ensuite, le thread principal appelle la méthode principale d'une certaine classe ;

  4. Donc, la méthode principale s'exécute dans le thread principal, et tous les programmes précédents sont monothreads

  5. le démarrage de jvm est multithread :

(1) Parce que le thread de récupération de place doit également être démarré au démarrage de la jvm, sinon un débordement de mémoire se produira facilement
(2) Le thread de récupération de place actuel plus le thread principal précédent ; , au moins deux threads sont démarrés, le démarrage de jvm est donc multithread.

Le contenu lié au multi-threading est divisé en plusieurs parties :

  1. Préparez-vous : le statut du fil

  2. Méthode de force intérieure : méthodes (mécanismes) dont dispose chaque objet

  3. Taizu Changquan : classe de fil de base

  4. Manuel Nine Yin : Multi- avancé classe de contrôle des threads

Zhaomabu : Statut du fil (cinq types)

  1. Nouveau : Nouveau statut, lorsque l'objet thread est créé, c'est-à-dire entrer dans le nouvel état, tel que : Thread t = new MyThread()

  2. Runnable : état prêt, lorsque la méthode start() (t.start()) de l'objet thread est appelé, le thread entre dans l'état prêt. Le thread à l'état prêt signifie uniquement que le thread est prêt et attend l'exécution de la planification du processeur à tout moment. Cela ne signifie pas que le thread s'exécutera immédiatement après l'exécution de t.start()

  3. <.> En cours d'exécution : état d'exécution. Lorsque le processeur commence à planifier les threads à l'état prêt, le thread peut réellement être exécuté à ce moment-là, c'est-à-dire qu'il entre dans l'état d'exécution.

  4. Bloqué : état bloqué Pour une raison quelconque, le thread en état d'exécution abandonne temporairement le droit d'utiliser le processeur et arrête l'exécution à ce moment-là, il entre dans l'état bloqué. il entre dans l'état prêt, il y a une chance d'être appelé à nouveau par le CPU pour entrer dans l'état d'exécution

  5. Mort : état de mort, le thread a terminé son exécution ou a quitté l'exécution. () en raison d'une exception, et le thread a terminé son cycle de vie

  6. Remarque :

    (1) L'état prêt est la seule entrée à l'état d'exécution

    (2) Si un thread veut entrer dans l'état d'exécution pour l'exécution, il doit d'abord être dans l'état prêt
    (3) Selon la cause du blocage, l'état de blocage peut être divisé en trois types :
    [1] En attente de blocage : le thread en état d'exécution exécute la méthode wait(), faisant entrer ce thread dans l'état d'attente de blocage
    [2] Blocage synchrone : lorsque le thread ne parvient pas à acquérir. le verrou de synchronisation synchronisé (car le verrou est occupé par d'autres threads), il entrera dans l'état de blocage synchronisé
    [3] Autre blocage : en appelant le thread sleep() ou When join() ou une requête d'E/S est émis, le thread entrera dans l’état de blocage. Lorsque l'état sleep() expire, join() attend que le thread se termine ou expire, ou que le traitement des E/S est terminé, le thread entre à nouveau dans l'état prêt


Méthode Inner Power Heart : Chaque objet a des méthodes

synchronisées, attendre et notifier sont des outils de synchronisation que tout objet a

moniteur :

( 1) est appliqué aux problèmes de synchronisation Outil de planification de threads artificiels

(2) Chaque objet Java dispose d'un moniteur pour surveiller la réentrance du code concurrent.
(3) Le moniteur ne joue aucun rôle lors du codage sans multi-threading. Au contraire, s'il est dans la plage synchronisée, le moniteur joue un rôle

attendre/notifier : les deux doivent exister. dans le bloc synchronisé

Et ces trois mots-clés ciblent le même moniteur, ce qui signifie qu'après l'attente, d'autres threads peuvent entrer dans l'exécution du bloc synchronisé

Taizu Changquan : Basic Thread Class

  1. Classe de thread

  2. Classe exécutable

  3. Classe appelable

Jiuyin Zhenjing : Classe de contrôle multithread avancée

Classe ThreadLocal :

(1) Variables opposées utilisées pour enregistrer les threads

(2) Lorsque ThreadLocal est utilisé pour gérer les variables, ThreadLocal est Chaque thread l'utilisation de la variable fournit une copie indépendante de la variable, de sorte que chaque thread peut modifier indépendamment sa propre copie sans affecter les copies correspondantes des autres threads.
(3) Contrôle de connexion couramment utilisé et utilisateur, tel que l'enregistrement des informations de session.

Classe atomique (AtomicInteger/AtomicBoolean)

Classe de verrouillage : ReentrantLock/ReentrantReadWriteLock.ReadLock/ReentrantReadWriteLock.WriteLock


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!

Déclaration:
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