


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:
- É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.
- 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.
- 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.
- 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!

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

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é.

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.

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.

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.

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.

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

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


Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

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 !

Article chaud

Outils chauds

Dreamweaver CS6
Outils de développement Web visuel

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

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

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