Maison > Java > javaDidacticiel > le corps du texte

Explication détaillée des verrous explicites dans la programmation simultanée Java

零下一度
Libérer: 2017-06-25 10:26:45
original
1503 Les gens l'ont consulté

Verrouillage explicite

1. Verrouillage et ReentrantLock

Le verrouillage fournit une opération d'acquisition de verrouillage inconditionnelle, interrogeable, chronométrée et interrompue. Toutes les opérations de verrouillage et les méthodes de déverrouillage sont explicites

ReentrantLock implémente Lock : et fournit la même sémantique de mémoire que synchronisée ; il fournit également une sémantique de verrouillage

réentrant

1. Sémantique de base :

void LockDefinition() {
        Lock lock = new ReentrantLock();try {//do someting//更新对象状态,捕获异常;并在必要时恢复不变性条件} finally {//finally中释放锁            lock.unlock();
        }
    }
Copier après la connexion

2. Verrous d'interrogation et verrous temporisés

lock.tryLock([Long,TimeUnit] ) : Essayez d'acquérir le verrou, et l'heure est un verrou temporisé

3. Opération d'acquisition de verrou disruptif

Lock.lockInterruptably();

2. Équité

ReentrantLock peut créer des verrous équitables (acquisition séquentielle demandée de verrous) et des verrous injustes ( saut de file d'attente possible).

Saut de file d'attente : lorsqu'un thread demande un verrouillage injuste, si l'état du verrou est disponible au moment de la demande, alors le thread ne sera pas mis dans la file d'attente, mais ignorera tous les threads en attente dans le faire la queue et obtenir le verrou ;

Remarque : le verrouillage injuste ne préconise pas le saut de file d'attente, mais il ne peut pas empêcher le saut de file d'attente ; tandis que le verrouillage équitable sera placé dans la file d'attente et exécuté séquentiellement

 Le verrouillage injuste est plus rapide que le verrouillage équitable lorsque la concurrence est féroce Rapide : La raison en est qu'il y a un délai important entre la reprise d'un thread dans la file d'attente et le début de son exécution

3. Verrouillage en lecture-écriture

ReentrantLock est un verrou mutex standard, mais dans certains scénarios, tels que : la lecture et la lecture parallèles ne peuvent pas être obtenues

Verrouillage en lecture-écriture ReadWriteLock : implémentez ReentrantReadWriteLock : méthode de verrouillage en lecture readLock et verrouillage en écriture writeLock

 1. Méthode d'interaction et d'implémentation

Priorité de libération : lorsqu'un verrou en écriture est libéré et qu'il y a à la fois des lectures et des écritures dans la file d'attente, la lecture, l'écriture ou le thread qui envoie la requête doit-il être donné en premier priorité?

Le fil de lecture saute dans la file d'attente : il y a un verrou d'écriture en attente du verrou de lecture actuel, le verrou de lecture suivant devrait-il donc sauter dans la file d'attente et lire directement ? La lecture directe améliorera la simultanéité mais peut entraîner un manque d'écriture et un échec d'obtention de la

Réentrance : les verrous de lecture et les verrous d'écriture sont-ils réentrants ?

Rétrogradation : Verrouillage en écriture, pouvez-vous acquérir un verrou en lecture sans relâcher le verrou, afin que le verrou du fil puisse être rétrogradé ?

Mise à niveau : le verrou en lecture peut-il être mis à niveau vers un verrou en écriture avant les autres threads en attente ? Si deux threads tentent de mettre à niveau pour écrire des verrous en même temps, il est facile de provoquer un blocage

Applicable à : les structures de données qui lisent principalement les opérations

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal