Maison  >  Article  >  Java  >  Qu’est-ce qu’un verrou Java ?

Qu’est-ce qu’un verrou Java ?

青灯夜游
青灯夜游original
2019-11-15 16:24:205321parcourir

Qu’est-ce qu’un verrou Java ?

Le verrouillage est le mécanisme de synchronisation le plus important dans la programmation simultanée Java. Le verrouillage est implémenté en JAVA via le mot-clé Synchronized et les classes associées sous le package java.util.concurrent.

La notion de verrou en Java

Spin lock : signifie que lorsqu'un thread acquiert un verrou, si le verrou a été acquis par un autre thread, alors le thread Attendez en boucle, puis déterminez en permanence si le verrou peut être acquis avec succès. La boucle ne se terminera pas tant que le verrou n'est pas acquis.

Verrouillage optimiste : on suppose qu'il n'y a pas de conflit. Lors de la modification des données, s'il s'avère que les données sont incohérentes avec les données précédemment acquises, lisez les dernières données et réessayez la modification après la modification.

Verrouillage pessimiste : on suppose qu'un conflit de concurrence se produira, synchronisera toutes les opérations associées sur les données et commencera le verrouillage lors de la lecture des données.

Verrouillage exclusif (écriture) : ajoutez un verrou en écriture à la ressource, le thread qui possède le verrou peut modifier la ressource, et les autres threads ne peuvent pas ajouter plus de verrou (écriture unique)

Verrou partagé (lecture) : après avoir ajouté un verrou en lecture à une ressource, il ne peut être lu mais non modifié. Les autres threads ne peuvent ajouter que des verrous en lecture, pas des verrous en écriture (lectures multiples)

Verrouillage réentrant : une fois qu'un thread a obtenu un verrou, il peut entrer librement le code synchronisé avec le même verrou

Verrou non réentrant : une fois qu'un thread a obtenu un verrou, il ne peut pas entrer librement le même code. Le code pour synchroniser le verrou

Verrouillage équitable : l'ordre de compétition pour le verrou est dans l'ordre du premier venez, premier servi

Verrouillage injuste : l'ordre de concourir pour le verrou n'est pas dans l'ordre du premier arrivé, premier servi

Plusieurs méthodes importantes d'implémentation de verrous en Java : synchronized, ReentrantLock, ReentrantReadWriteLock

Mots-clés de synchronisation : synchronized

Portée du verrouillage : Verrouillage d'objet, verrouillage de classe, verrouillage distribué

Fonctionnalités synchronisées : Verrouillage réentrant, exclusif et pessimiste

Optimisation du verrouillage :

L'élimination du verrouillage est une méthode d'optimisation du verrouillage qui se produit au niveau du compilateur. Le compilateur juste-à-temps de la machine nécessite la synchronisation de certains codes pendant l'exécution, mais il est détecté qu'il n'y a pas de compétition de verrouillage pour les données partagées Eliminate (paramètres pour activer l'élimination du verrouillage : -xx:+DoEscapeAnalysis -XX:+EliminateLocks)

Grossissement du verrouillage : dans certains cas, nous souhaitons fusionner de nombreuses demandes de verrouillage en une seule demande

Remarque : le mot-clé synchronisé réalise non seulement la synchronisation, mais JMM stipule que synchronisé doit assurer la visibilité (ne peut pas être mis en cache)

Exemple de code d'utilisation synchronisé :

public class Counter {
private static int i = 0;
// 等价于 synchronized(this)
public synchronized void update() {
i++;
}
public void updateBlock() {
synchronized (this) {
i++;
}
}
// 等价于 synchronized (Counter.class)
public static synchronized void staticUpdate() {
i++;
}
public static void staticUpdateBlock() {
synchronized (Counter.class) {
i++;
}
}
}

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
Article précédent:Que peut faire Java ?Article suivant:Que peut faire Java ?