Vernaculaires talk synchronisé, CAS principe sous-jacent, serrures de verrouillage et principes de promotion de la serrure

               目录

               1、乐观锁和悲观锁的概念

               2、synchronized底层的原理

               3.  CAS的原理

               4.  并发包下Lock锁和synchronized对比

               5.  锁升级原理
复制代码

Bonjour à tous, je Ninetowns quatre plus petits Haoheng oreilles.

Aujourd'hui, nous venons de parler avec vernaculaire synchronisé, CAS principe sous-jacent, serrures de verrouillage et principes de promotion de la serrure.

1, le concept de verrouillage optimiste et pessimiste

Un fil, comme une variable à modifier au cours de cette modification, il est la psychologie pessimiste que d'autres discussions dans cette période, il est également possible de modifier cette variable, il faut donc ajouter à une serrure variable pour faire en sorte que lors de sa modification, ne pas le fil ne peut pas aller visiter cette variable. Ce verrou est le verrouillage pessimiste. verrouillage pessimiste poids lourd est verrouillé, les objets au nom du mot-clé synchronisé.

Un fil de manière à modifier une variable, au cours de cette modification, il est optimiste fils psychologique, que d'autres dans cette période, de ne pas modifier cette variable, de sorte qu'il pourrait être une opération de modification, ajoutera à la variable verrouiller. Ce verrou est verrouillage optimiste. Optimiste verrouillage est un verrou léger, au nom du CAS objet.

Principe 2, synchronisé sous-jacente

Tout d'abord, nous avons besoin de connaître un concept --monitor.

Chaque objet dispose d'un moniteur interne, moniteur qui comporte un compteur, à partir de zéro.

Si ce fil veulent obtenir le moniteur de verrouillage, d'abord déterminer le compteur du moniteur est 0, si 0, ce qui indique n'acquiert le verrou, le fil peut acquérir le verrou, puis contre par un, sinon 0, la description a été il y a d'autres fils a acquis le verrou, l'attente du bloc doit de fil.

Synchronisé avec le principe sous-jacent est commande jvm et le moniteur entre les deux.

généralement synchronisé avec le verrou d'objet, la classe de verrouillage est le verrouillage de l' objet de classe. Si vous utilisez le mot - clé synchronisé dans l' instruction de compilation sous - jacente jvm, il y aura deux instructions de monitorenter et monitorexit. Visser dans des segments de code synchronisés, monitorenter instruction compteur de surveillance d'exécution est incrémenté de 1, de sorte que les autres fils ont trouvé compteur de contrôle est différent de 0, il est bloqué en attente;

Visser un des segments de code synchronisés, exécution d'instruction de monitorexit est de surveiller compteur de 1, de sorte que les autres fils ont trouvé compteur de contrôle est égal à 0, la serrure peut obtenir, pour surveiller le compteur est incrémenté, puis l'exécution de la logique métier.

Ce qui précède est le principe sous-jacent de l'objet synchronisé, verrouillé classe.

Procédé de verrouillage par commande pas surveiller, mais par ACC_SYNCHORNIZED mot clé, déterminer si le procédé de synchronisation.

3. Principe de CAS

CAS, Conmpare Et Swap, Anglais se traduit par « comparer et d'échanger. » Il est un processus en trois étapes, la première étape consiste à lire la valeur, la deuxième valeur de comparaison étape, regardez leurs propres valeurs, et de lire un autre, la troisième étape consiste à modifier, si la valeur de la lecture même avec eux-mêmes, sur l'amendement.

CAS classe d'implémentation est le plus AtomicInteger classique.

Par exemple, deux fils à lire sur AtomicInteger plus 1, un fil l'ancienne valeur est 0, fils B lire l'ancienne valeur est 0, A puis exécuter des opérations CAS, plus de valeur, et la valeur juste moi-même trouvé la lecture de la même chose, tous les est 0, il modifie la valeur de 1, fils B exécutent des opérations CAS, plus de valeur, et la valeur juste moi-même trouvé la lecture est pas la même chose, devient 1, et il est équivalent à relire les anciennes valeurs, vieux propre mémoire valeur à 1, puis continuer à fonctionner CAS.

CAS au niveau du matériel au fond des atomes vous garantis en même temps un seul thread peut exécuter CAS, puis comparer le premier ensemble, CAS même temps d'autres threads pour exécuter à ce moment échouera.

CAS est un problème de bug peut se produire une circulation d'air ABA. Si vous voulez résoudre le problème de l'ABA, vous pouvez utiliser la classe AtomicStampedReference, il a créé un numéro de version interne d'une manière similaire pour résoudre le problème de l'ABA.

4. Fermez le verrou et le contrat et Synchronized comparative

Je pense que la principale différence entre les deux est les quatre points suivants;

1. Tout d'abord est synchronisé java intégré dans les mots clés, est le niveau jvm, Lock est une classe java, est le niveau jdk;

2.synchronized ne peut pas déterminer si oui ou non d'acquérir l'état de verrouillage, de verrouillage peut déterminer si l'acquisition du verrou;

3.synchronized libérera automatiquement le verrouillage, le besoin Lock (pour libérer la méthode de déverrouillage de verrouillage ()) en enfin libérer manuellement le verrou, ou susceptible de causer blocage de fil;

Serrure à 4.Lock approprié pour le code de synchronisation de synchronisation de masse, verrouillage synchronisé pour une petite quantité de problèmes de synchronisation de code.

5. Principe de verrouillage escalade

A commencé comme un état sans blocage, venez sur le jugement irait s'il y a un verrou, un verrou, puis le début de la serrure est support de verrouillage partiales. serrure de verrouillage biaisés ce fil pour obtenir la ressource actuelle, je donnerai la priorité à acquérir le verrou de le laisser aller, si elle ne reçoit pas dans la serrure, puis passer à un poids léger, un verrou de verrouillage CAS optimiste, verrouillage optimiste il est temps de comparer et processus d'échange, si aucun succès, ce sera une rotation avant qu'elle ne dégénère en un verrou lourd après une rotation synchronisée à un certain nombre, auquel cas il veillera à ce que la les problèmes de performance . Si vous pensez que est synchronisé commencer un tel verrou lourd, que la performance est relativement pauvre.

                        End
复制代码

A propos de l'auteur: petites oreilles Haoheng, un programmeur Haoheng. Je veux que chacun dans le monde de la technologie Haoheng, avec la vision de voir le monde de la technologie. Bienvenue à scanner le code suivant Fanger Wei, une attention soutenue, une grande vague de la série originale est sur le chemin

Je suppose que tu aimes

Origine juejin.im/post/5e685ba7f265da57685dd3f7
conseillé
Classement