Maison > Java > JavaBase > le corps du texte

Qu'est-ce qu'un verrou en Java

Libérer: 2019-11-21 10:47:54
original
6185 Les gens l'ont consulté

Qu'est-ce qu'un verrou en Java

Les verrous sont utilisés pour contrôler la façon dont plusieurs threads accèdent aux ressources partagées. De manière générale, un verrou peut empêcher plusieurs threads d'accéder aux ressources partagées en même temps.

Les verrous en Java ont principalement les concepts suivants :

1. Verrou de synchronisation

En même temps, un verrou de synchronisation n'est accessible que par un seul thread. . Sur la base des objets, la synchronisation est effectuée via le mot-clé synchronisé pour obtenir un accès mutuellement exclusif aux ressources concurrentes.

2. Verrouillage exclusif (verrouillage mutex réentrant)

Mutuellement exclusif, c'est-à-dire qu'il ne peut être détenu que par un seul thread au même moment, c'est-à-dire qu'il peut être réentrant ; détenu par un seul Le fil acquiert plusieurs fois. Qu'est-ce que ça veut dire? Selon le mécanisme d'acquisition du verrou, il est divisé en « verrou équitable » et « verrou injuste ». Les verrous exclusifs sont implémentés en Java via ReentrantLock, qui est par défaut des verrous injustes.

3. Le verrouillage équitable

est un type de verrouillage exclusif qui suit la règle du premier arrivé, premier servi pour les threads en attente via CLH. Les threads font la queue afin d'acquérir des verrous de manière équitable. En Java, il existe une variable membre sync de type Sync dans ReetrantLock Lorsque son instance est de type FairSync, ReetrantLock est un verrou équitable. Pour définir la synchronisation sur le type FairSync, just-Lock lock = new ReetrantLock (true).

4. Verrouillage injuste

signifie que lorsqu'un thread souhaite acquérir un verrou, il ignorera la file d'attente CLH et acquerra le verrou directement. ReetrantLock est par défaut un verrou injuste, ou - Lock lock = new ReetrantLock (false).

5. Verrou partagé

Un verrou qui peut être acquis et partagé par plusieurs threads en même temps. Autrement dit, plusieurs threads peuvent acquérir le verrou et traiter l'objet verrou. Le cas typique est le verrouillage en lecture - ReentrantReadWriteLock.ReadLock. Autrement dit, plusieurs threads peuvent le lire, et cela n'affecte pas la lecture des autres threads, mais personne ne peut le modifier. CyclicBarrier, CountDownLatch et Semaphore sont également des verrous partagés.

6. Le verrou en lecture-écriture

maintient une paire de verrous associés. Le « verrou en lecture » est utilisé pour les opérations en lecture seule. Il s'agit d'un « verrou partagé » et peut être acquis par. plusieurs threads en même temps. Le « verrou d'écriture » est utilisé pour les opérations d'écriture. Il s'agit d'un « verrou exclusif » et ne peut être acquis que par un seul verrou de thread.

En Java, le verrou en lecture-écriture est défini par l'interface ReadWriteLock, et sa classe d'implémentation est ReentrantReadWriteLock, y compris les classes internes ReadLock et WriteLock. Les méthodes readLock() et writeLock() renvoient respectivement le verrou pour l'opération et le verrou pour l'opération d'écriture.

Pour plus de connaissances sur Java, veuillez prêter attention au tutoriel de base Java.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!