Maison Java javaDidacticiel Introduction à l'utilisation du mot-clé synchronisé en Java (exemple de code)

Introduction à l'utilisation du mot-clé synchronisé en Java (exemple de code)

Jan 30, 2019 am 11:21 AM
synchronized

Cet article vous apporte une introduction à l'utilisation du mot-clé synchronisé en Java (exemples de code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent le faire pour référence, j'espère. cela vous sera utile.

En programmation concurrente, le mot-clé synchronisé est un rôle courant. Nous avions l'habitude d'appeler le verrou de poids du mot-clé synchronisé, mais synchronisé a été optimisé dans JDK1.6 et des verrous biaisés et des verrous légers ont été introduits. Cet article présente comment utiliser le mot-clé synchronisé, les différences et les principes de mise en œuvre des verrous biaisés, des verrous légers et des verrous lourds.

Regardons d'abord les 4 utilisations du mot-clé synchronisé.

1. Modifier les méthodes ordinaires

private synchronized void synMethod(){
}
Copier après la connexion

Cette utilisation, l'instance d'objet du verrou synchronisé.

2. Modifier les méthodes statiques

private static synchronized void synMethod(){
}
Copier après la connexion

synchronisées dans ce cas, le lock est l'objet Class actuel.

3. Bloc de méthode synchronisé

private  void synMethod1(){
        synchronized(this){
            
        }
    }    
    private  void synMethod2(){
        synchronized(ThreadTest.class){
            
        }
    }
Copier après la connexion

Verrouiller l'instance d'objet dans synMethod1 ; synMethod2 est l'objet Class actuel.

Réintroduire le principe du verrouillage

Avant d'introduire le principe du verrouillage, commençons par connaître l'en-tête de l'objet Java Mark Word, en prenant 32 bits à titre d'exemple.

État de verrouillage

25 bits

4 bits

1 bit

2 bits

 

23 bits

2 bits

S'il est biaisé en faveur du verrouillage

Drapeau de verrouillage

Verrouillage léger

Pointeur vers l'enregistrement de verrouillage dans la pile

0

Verrouillage lourd

Pointeur vers mutex (verrouillage lourd)

10

GCMarque

Vide

11

Verrouillage de biais

ThreadID

Époque

Âge de génération d'objet

1

01

Sans verrouillage

hashCode de l'objet

Âge de génération d'objet

0

01

Le tableau ci-dessus décrit les informations stockées dans l'en-tête de l'objet lorsque l'objet est dans chaque état de verrouillage.

1. Verrouillage biaisé

Dans l'environnement réel, lorsqu'un thread accède à un bloc synchronisé, si aucun autre thread n'est en compétition pour le verrou, et Le même thread acquiert le verrou plusieurs fois, c'est-à-dire qu'un seul thread exécute le code de synchronisation. Dans ce cas, si le thread est bloqué à chaque fois, cela signifie un gaspillage des performances du processeur. Dans ce cas, la notion de verrouillage biaisé est introduite.

  • Accéder au bloc de code synchronisé

  • Déterminez si l'ID de thread stocké dans l'en-tête de l'objet Mark Word pointe vers le thread actuel. Si tel est le cas, cela indique que le verrou actuel est réentrant. Il n'est pas nécessaire d'obtenir le verrou et d'exécuter directement la synchronisation. code

  • Sinon, essayez d'utiliser l'algorithme CAS pour mettre à jour l'ID du fil dans l'en-tête de l'objet.

  • Obtient avec succès le verrou et exécute le code de synchronisation. L'échec de la mise à jour indique qu'il existe une concurrence de verrouillage. Attendez le point de sécurité global, suspendez le thread qui possède le verrou biaisé et choisissez de mettre à niveau le verrou biaisé vers un verrou léger ou de le définir sur aucun verrou en fonction de l'indicateur de verrouillage dans le fichier. en-tête d'objet.

Vous pouvez utiliser -XX:-userBiasedLocking=false pour désactiver l'optimisation du verrouillage biaisé JVM et entrer le verrouillage léger directement par défaut.

2. Verrouillage léger

  • Bloc de code de synchronisation d'accès , créez d'abord une zone d'enregistrement de verrouillage (Lock Record) dans la pile de threads du thread actuel.

  • Copiez l'en-tête de l'objet Mark Word dans l'enregistrement de verrouillage.

  • Utilisez CAS pour essayer de mettre à jour le pointeur de fil de discussion dans l'en-tête de l'objet Marquez Word vers un pointeur vers le fil de discussion actuel

  • Si la mise à jour est réussi, vous obtiendrez un verrou léger.

  • La mise à jour a échoué, vérifiez si le pointeur dans Mark Word pointe vers le fil de discussion actuel.

  • Si oui, cela signifie la réentrée du verrouillage. Exécuter le bloc de code synchronisé

  • Sinon, cela signifie qu'il y a de la concurrence en ce moment. Les verrous légers doivent être étendus aux verrous de poids.

3. Verrouillage du poids

Le verrouillage du poids est implémenté en fonction du moniteur d'objet (Moniteur).

Lorsqu'un thread exécute du code de synchronisation, il doit appeler une instruction Monitor.enter. Une fois l’exécution terminée, appelez l’instruction Monitor.exit. On peut voir ici que le moniteur est exclusif. Un seul thread peut entrer avec succès à un moment donné, et les autres threads ne peuvent être bloqués que dans la file d'attente. Ce verrou à poids est donc très coûteux à exploiter.

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

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

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

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

Les principes et scénarios d'utilisation de Synchronized en Java et l'analyse de l'utilisation et des différences de l'interface Callable Les principes et scénarios d'utilisation de Synchronized en Java et l'analyse de l'utilisation et des différences de l'interface Callable Apr 21, 2023 am 08:04 AM

1. Fonctionnalités de base 1. Cela commence par un verrou optimiste, et si les conflits de verrouillage sont fréquents, il est converti en verrou pessimiste. 2. Cela commence par une implémentation de verrouillage légère, et si le verrou est maintenu pendant une longue période, il est activé. est converti en un verrou lourd. 3. La stratégie de verrouillage tournant qui est la plus probablement utilisée lors de l'implémentation de verrous légers 4. C'est un verrou injuste 5. C'est un verrou réentrant 6. Ce n'est pas un verrou en lecture-écriture 2. La JVM synchronisera le processus de verrouillage. Les verrous sont divisés en états sans verrouillage, verrouillage biaisé, verrouillage léger et verrouillage lourd. Il sera mis à niveau séquentiellement en fonction de la situation. Le verrouillage biaisé suppose que le protagoniste masculin est un verrou et que le protagoniste féminin est un fil. Si seulement ce fil utilise ce verrou, alors le protagoniste masculin et le protagoniste féminin peuvent vivre heureux pour toujours même s'ils n'obtiennent pas d'acte de mariage (en évitant les hauts). (opérations de coûts). Mais le second rôle féminin apparaît.

Principe de synchronisation des mots clés Java et exemple d'analyse de l'état du verrouillage Principe de synchronisation des mots clés Java et exemple d'analyse de l'état du verrouillage May 11, 2023 pm 03:25 PM

1. Le concept de verrou dans Java Spin lock : Lorsqu'un thread acquiert un verrou, si le verrou a été acquis par un autre thread, alors le thread attendra en boucle, puis continuera à juger si le verrou peut être acquis avec succès jusqu'à ce que il est acquis. Le verrou sortira de la boucle. Verrouillage optimiste : en supposant qu'il n'y ait pas de conflit, si les données s'avèrent incohérentes avec les données précédemment acquises lors de la modification des données, les dernières données seront lues et la modification sera réessayée. Verrouillage pessimiste : supposez que des conflits de concurrence se produiront, synchroniserez toutes les opérations liées aux données et commencerez le verrouillage à partir du moment où les données sont lues. Verrou exclusif (écriture) : ajoutez un verrou en écriture à la ressource. Le thread peut modifier la ressource, mais les autres threads ne peuvent pas la verrouiller à nouveau (écriture unique). Verrou partagé (lecture) : après avoir ajouté un verrou en lecture à une ressource, celui-ci peut uniquement être lu mais pas modifié. Les autres threads ne peuvent ajouter que des verrous en lecture et ne peuvent pas ajouter de verrous en écriture (plusieurs). Voir comme S

Comment utiliser synchronisé pour implémenter le mécanisme de synchronisation en Java ? Comment utiliser synchronisé pour implémenter le mécanisme de synchronisation en Java ? Apr 22, 2023 pm 02:46 PM

Résumé de l'utilisation de synchronisé en Java 1. Lorsque synchronisé est utilisé comme modificateur de fonction, l'exemple de code est le suivant : Publicsynchronizedvoidmethod(){//….} Il s'agit de la méthode de synchronisation. Alors, quel objet est synchronisé verrouillé à ce moment ? Ce qu'il verrouille appelle cet objet méthode synchronisée. En d'autres termes, lorsqu'un objet P1 exécute cette méthode de synchronisation dans différents threads, ils formeront une exclusion mutuelle pour obtenir un effet de synchronisation. Cependant, un autre objet P2 généré par la Classe à laquelle appartient cet objet peut arbitrairement appeler cette méthode en ajoutant le mot-clé synchronisé. L'exemple de code ci-dessus, etc.

Quelles sont les trois méthodes de synchronisation en Java et comment les utiliser ? Quelles sont les trois méthodes de synchronisation en Java et comment les utiliser ? Apr 27, 2023 am 09:34 AM

1. Expliquez que synchronisé est notre méthode de synchronisation la plus couramment utilisée et qu'il existe trois manières principales de l'utiliser. 2. Exemple//Synchronisation de méthode de classe générale synchroniséepublidvoidinvoke(){}//Synchronisation de méthode statique de classe synchroniséepublicstaticvoidinvoke(){}//Synchronisation de bloc de code synchronisé(objet){}La différence entre ces trois méthodes est que les objets synchronisés sont différents. Les classes ordinaires synchronisent l'objet lui-même, les méthodes statiques synchronisent la classe elle-même et les blocs de code synchronisent les objets que nous remplissons entre parenthèses. Quelles collections existe-t-il en Java ?

Quel est le principe et le processus de mise à niveau du verrouillage synchronisé Java ? Quel est le principe et le processus de mise à niveau du verrouillage synchronisé Java ? Apr 19, 2023 pm 10:22 PM

Préparation des outils Avant de parler formellement du principe de la synchronisation, parlons d'abord des verrous de rotation, car les verrous de rotation jouent un rôle important dans l'optimisation de la synchronisation. Pour comprendre les verrous de rotation, nous devons d’abord comprendre ce qu’est l’atomicité. Ce qu'on appelle l'atomicité signifie simplement que chaque opération n'est pas effectuée ou que tout faire signifie qu'elle ne peut pas être interrompue pendant l'opération. Par exemple, pour en ajouter une aux données variables, il y a les trois étapes suivantes : ajouter des données Charger. de la mémoire dans le registre. Ajoutez-en un à la valeur des données. Écrivez le résultat en mémoire. L'atomicité signifie que lorsqu'un thread effectue une opération d'incrémentation, il ne peut pas être interrompu par d'autres threads uniquement lorsque ce thread termine ces trois processus.

Pourquoi Java doit-il fournir Lock au lieu d'utiliser simplement le mot-clé synchronisé ? Pourquoi Java doit-il fournir Lock au lieu d'utiliser simplement le mot-clé synchronisé ? Apr 20, 2023 pm 05:01 PM

Résumé : Le mot clé synchronisé est fourni en Java pour garantir qu'un seul thread peut accéder au bloc de code synchronisé. Puisque le mot-clé synchronisé a été fourni, pourquoi l'interface Lock est-elle également fournie dans le package Java SDK ? Est-ce une réinvention inutile de la roue ? Aujourd’hui, nous discuterons ensemble de cette question. Le mot-clé synchronisé est fourni en Java pour garantir qu'un seul thread peut accéder au bloc de code synchronisé. Puisque le mot-clé synchronisé a été fourni, pourquoi l'interface Lock est-elle également fournie dans le package Java SDK ? Est-ce une réinvention inutile de la roue ? Aujourd’hui, parlons-en ensemble

Qu'est-ce que Java synchronisé Qu'est-ce que Java synchronisé May 14, 2023 am 08:28 AM

Qu'est-ce que Synchronized ? Les lecteurs Java ne sont pas étrangers au mot-clé synchronisé. Il peut être vu dans divers codes sources de middleware ou de codes sources du JDK. Pour les lecteurs qui ne sont pas familiers avec synchronisé, ils savent seulement que le mot-clé synchronisé doit être utilisé en multi. -le threading synchronisé peut assurer la sécurité des threads. On l'appelle : verrouillage mutex (un seul thread peut s'exécuter en même temps, les autres threads attendront), également appelé : verrouillage pessimiste (un seul thread peut s'exécuter en même temps, les autres threads attendront). vous aider à l'implémenter, les développeurs n'ont qu'à utiliser le mot-clé synchronisé. Lors de son utilisation, vous devez utiliser un objet comme mutex pour le verrou

Combien de modificateurs de non-accès existe-t-il en Java ? Combien de modificateurs de non-accès existe-t-il en Java ? Aug 30, 2023 pm 06:01 PM

Java fournit d'autres modificateurs pour fournir des fonctionnalités au-delà de la visibilité. Ces modificateurs sont appelés modificateurs de non-accès. Les membres déclarés comme statiques sont communs à toutes les instances de la classe. Les membres statiques sont des membres de niveau classe stockés dans la mémoire de classe. Final Ce modificateur est utilisé pour restreindre d'autres modifications à une variable, une méthode ou une classe. La valeur d'une variable déclarée finale ne peut plus être modifiée une fois qu'elle a obtenu sa valeur. La méthode Final ne peut pas être substituée dans une sous-classe, et une sous-classe de la classe Final ne peut pas non plus être créée. Résumé Ce modificateur peut être utilisé avec une classe ou une méthode. Vous ne pouvez pas appliquer ce modificateur aux variables et aux constructeurs. Les méthodes déclarées abstraites doivent être modifiées dans les sous-classes. Vous ne pouvez pas instancier une classe déclarée abstraite. Synchrone Ce modificateur est utilisé pour contrôler plusieurs threads

See all articles