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!