recherche
MaisonJavajavaDidacticielQuels sont les principes sous-jacents et le processus de mise à niveau de verrouillage synchronisé en Java?

Quels sont les principes sous-jacents et le processus de mise à niveau de verrouillage synchronisé en Java?

Approfondissement Java synchronized : Mécanisme de bas niveau et mise à niveau de verrouillage

synchronized est un mot-clé important utilisé pour la synchronisation du thread dans Java. Son mécanisme de mise en œuvre et de mise à niveau de verrouillage sous-jacent est crucial pour les performances de la concurrence. Cet article explorera les détails de fonctionnement de synchronized et analysera le processus de mise à niveau de verrouillage en combinaison avec un exemple de code.

L'exemple de code suivant démontre la transition de différents états de verrouillage:

 public static void main (String [] args) lance InterruptedException {
    // Il y a un délai de 4 secondes après le début de la machine virtuelle de hotspot avant que le verrouillage de biais soit activé Thread.Sleep (5000);
    Objet obj = nouveau objet ();
    System.out.println ("Statut initial =================================================================================.
    nouveau thread (() -> {
        synchronisé (obj) {
            System.out.println (thread.currentThread (). GetName () "Get Lock est en cours d'exécution ... \ n"
                      Classlayout.parseinstance (obj) .toprintable ());
        }
    }, "Thread a"). Start ();

    Thread.Sleep (1000);

    nouveau thread (() -> {
        synchronisé (obj) {
            System.out.println (thread.currentThread (). GetName () "Get Lock est en cours d'exécution ... \ n"
                      Classlayout.parseinstance (obj) .toprintable ());
        }
    }, "Thread b"). Start ();

    // thread.Sleep (5000);
    System.out.println (thread.currentThread (). GetName () classlayout.parseinstance (obj) .toprintable ());
}

Exécutez ce code et observez les résultats de sortie pour voir le processus de conversion de l'état de verrouillage d'un verrouillage sans serrure à un verrouillage biaisé, un verrouillage léger et même un verrouillage poids lourd (Remarque: le verrouillage biaisé a été déprécié par la version supérieure de JVM).

Le processus de mise à niveau de verrouillage synchronized est le suivant:

  1. État sans verrouillage: l'état initial de l'objet, l'en-tête de l'objet contient des informations telles que le code de hachage, l'âge GC, etc.
  2. Verrouilles biaisées (obsolètes dans les versions JVM plus récentes): Lorsqu'un seul thread accède à un bloc de synchronisation, le JVM biaisait le verrou au thread et que l'en-tête d'objet enregistre biaisé à l'ID de fil, réduisant la surcharge de l'acquisition de verrouillage.
  3. Verrouillage léger: lorsque le deuxième thread essaie d'acquérir le verrou, si le fil qui biaisait le verrou n'est pas exécuté dans le bloc synchrone, le verrouillage de polarisation est mis à niveau vers un verrou léger. Le verrouillage léger acquiert la serrure à travers des tentatives de spin, avec des tours limités, et s'il échoue, il se passe à une serrure poids lourd.
  4. Verrouillage des poids lourds: le fil de discussion, la planification du système d'exploitation, les frais généraux élevés, adaptés aux scénarios de compétition élevés.

La sortie de l'exemple de code montrera la transition de l'état de verrouillage, comme des verrous sans serrure aux verrous légers, aux éventuelles verrous poids lourds. (L'état de verrouillage de biais peut ne pas être affiché car le verrouillage de biais est obsolète). L'analyse de ces sorties vous permet d'avoir une compréhension plus approfondie du processus dynamique de la mise à niveau de verrouillage.

En bref, la compréhension du mécanisme sous-jacent et du processus de mise à niveau de verrouillage de synchronized est crucial pour maîtriser la programmation concurrente Java et l'optimisation des performances. Grâce à la pratique du code et à l'analyse des résultats, ces connaissances peuvent être apprises et appliquées plus efficacement.

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
Comment le JVM gère-t-il la collection des ordures sur différentes plates-formes?Comment le JVM gère-t-il la collection des ordures sur différentes plates-formes?Apr 28, 2025 am 12:23 AM

JvmManagesgarBageCollectionACROSSPLATFORMSEFFECTIVELYBUSEUSAGENERATIONSPROACHANDADAPTINGTOOSANDHARDWAREDIFFERENCES.ITEPLOCHESSVARIEDSCOLLECTORSELESEERIAL, parallèle, CMS, etg1, chacun

Pourquoi le code Java peut-il fonctionner sur différents systèmes d'exploitation sans modification?Pourquoi le code Java peut-il fonctionner sur différents systèmes d'exploitation sans modification?Apr 28, 2025 am 12:14 AM

Le code Java peut fonctionner sur différents systèmes d'exploitation sans modification, car la philosophie "écrire une fois, exécuter partout" de Java est implémentée par Java Virtual Machine (JVM). En tant qu'intermédiaire entre le bytecode Java compilé et le système d'exploitation, le JVM traduit le bytecode en instructions de machine spécifiques pour s'assurer que le programme peut s'exécuter indépendamment sur n'importe quelle plate-forme avec JVM installé.

Décrivez le processus de compilation et d'exécution d'un programme Java, mettant en évidence l'indépendance de la plate-forme.Décrivez le processus de compilation et d'exécution d'un programme Java, mettant en évidence l'indépendance de la plate-forme.Apr 28, 2025 am 12:08 AM

La compilation et l'exécution des programmes Java réalisent l'indépendance de la plate-forme via ByteCode et JVM. 1) Écrivez le code source Java et compilez-le en bytecode. 2) Utilisez JVM pour exécuter ByteCode sur n'importe quelle plate-forme pour vous assurer que le code s'exécute sur les plates-formes.

Comment l'architecture matérielle sous-jacente affecte-t-elle les performances de Java?Comment l'architecture matérielle sous-jacente affecte-t-elle les performances de Java?Apr 28, 2025 am 12:05 AM

Les performances de Java sont étroitement liées à l'architecture matérielle, et la compréhension de cette relation peut améliorer considérablement les capacités de programmation. 1) Le JVM convertit Java Bytecode en instructions de la machine via la compilation JIT, qui est affectée par l'architecture du CPU. 2) La gestion de la mémoire et la collecte des déchets sont affectés par la RAM et la vitesse du bus mémoire. 3) Prédiction de cache et de branche Optimiser l'exécution du code Java. 4) Le traitement multi-threading et parallèle améliore les performances sur les systèmes multi-fond.

Expliquez pourquoi les bibliothèques natives peuvent briser l'indépendance de la plate-forme de Java.Expliquez pourquoi les bibliothèques natives peuvent briser l'indépendance de la plate-forme de Java.Apr 28, 2025 am 12:02 AM

L'utilisation de bibliothèques natives détruira l'indépendance de la plate-forme de Java, car ces bibliothèques doivent être compilées séparément pour chaque système d'exploitation. 1) La bibliothèque native interagit avec Java via JNI, fournissant des fonctions qui ne peuvent pas être directement implémentées par Java. 2) L'utilisation des bibliothèques natives augmente la complexité du projet et nécessite la gestion des fichiers de bibliothèque pour différentes plates-formes. 3) Bien que les bibliothèques natives puissent améliorer les performances, elles doivent être utilisées avec prudence et effectué des tests multiplateformes.

Comment le JVM gère-t-il les différences dans les API du système d'exploitation?Comment le JVM gère-t-il les différences dans les API du système d'exploitation?Apr 27, 2025 am 12:18 AM

JVM gère les différences d'API du système d'exploitation via JavanativeInterface (JNI) et Java Standard Library: 1. JNI permet au code Java d'appeler le code local et d'interagir directement avec l'API du système d'exploitation. 2. La bibliothèque Java Standard fournit une API unifiée, qui est mappée en interne sur différentes API du système d'exploitation pour s'assurer que le code se déroule sur les plates-formes.

Comment la modularité est-elle introduite dans Java 9 Impact Platform Independence?Comment la modularité est-elle introduite dans Java 9 Impact Platform Independence?Apr 27, 2025 am 12:15 AM

ModularityDoesNotDirectlyAffectedJava'splatformIndependence.java'splatformIndependensemAINENENEYBYTHEJVM, ButModularityInfluencesPlicationsStructureAndManagement, indirectly ImpactingPlatFatFindependence.1)

Qu'est-ce que ByteCode et comment cela se rapporte-t-il à l'indépendance de la plate-forme de Java?Qu'est-ce que ByteCode et comment cela se rapporte-t-il à l'indépendance de la plate-forme de Java?Apr 27, 2025 am 12:06 AM

Bytecodeinjavaisheintermediaterepresentation the-steplatefortiveindependence.1) javacodeiscompilentocodedestoredin.classfiles.2) thejvMinterpretsorcompiltesthisbytecodeintomachinecotetruntime, permettant à la nom de codécodèdetorunonanydevicewithajvm, ainsi en nomycodetorunonananydevicewithajvm, ainsi.

See all articles

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

PhpStorm version Mac

PhpStorm version Mac

Le dernier (2018.2.1) outil de développement intégré PHP professionnel

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)