Maison >Java >JavaBase >Plusieurs verrous courants en Java

Plusieurs verrous courants en Java

王林
王林original
2019-11-13 17:16:443750parcourir

Plusieurs verrous courants en Java

1. Spin lock

Comme son nom l'indique, le spin lock attendra un certain temps (spin), et rien Cela se produira pendant cette période. Si vous ne le faites pas, il vous suffit d'attendre que la ressource soit libérée. L'avantage est qu'il n'y a pas de perte d'efficacité lors du basculement entre le mode noyau et le mode utilisateur. la ressource, elle continuera à occuper la ressource CPU, elle fera donc un cycle pendant un certain temps, puis entrera dans l'état de blocage.

2. Les verrous lourds

synchronisés sont le mécanisme de mise en œuvre des verrous lourds. Les processus qui ne peuvent pas récupérer les ressources entreront dans un état de blocage.

3. Verrouillage biaisé

Comme son nom l'indique, il polarisera le premier processus à accéder à la ressource. Si un seul processus exécute le bloc de code de synchronisation, alors le. le dernier sera le verrou Bias, si d'autres threads s'emparent des ressources, il sera mis à niveau vers un verrou léger.

4. Verrouillage léger

Une fois le verrou biaisé mis à niveau, il devient un verrou léger. Le verrou ne peut être mis à niveau mais pas déclassé. Les autres processus du verrou léger entreront dans l'état d'auto-sélection. Si l'auto-sélection échoue, le verrou lourd sera mis à niveau.

5. Verrous équitables et injustes

Se réfère principalement au fait que les threads arrivent en premier, le premier servi pour obtenir le verrou est injuste, tandis que ReentrantLock est par défaut injuste et peut. être réglé sur juste.

6. Verrouillage pessimiste

Supposez toujours le pire des cas. Chaque fois que vous obtenez les données, vous pensez que d'autres les modifieront, donc à chaque fois que vous obtenez les données. Elle sera verrouillée à tout moment, de sorte que si quelqu'un d'autre souhaite récupérer les données, elle sera bloquée jusqu'à ce qu'elle obtienne le verrou (la ressource partagée n'est utilisée que par un thread à la fois, les autres threads sont bloqués et la ressource est transféré vers d’autres threads après utilisation).

Les bases de données relationnelles traditionnelles utilisent de nombreux mécanismes de verrouillage, tels que les verrous de ligne, les verrous de table, les verrous en lecture, les verrous en écriture, etc., qui sont tous verrouillés avant les opérations. Les verrous exclusifs tels que synchronisés et ReentrantLock en Java sont l'implémentation de l'idée de verrouillage pessimiste.

7. Verrouillage optimiste

Prenez toujours la meilleure situation. Chaque fois que vous allez chercher les données, vous pensez que les autres ne les modifieront pas, donc vous ne les modifierez pas. verrouillez-le. Cependant, lors de la mise à jour, il sera jugé si d'autres ont mis à jour les données pendant cette période. Cela peut être implémenté en utilisant le mécanisme de numéro de version (dans la base de données) et l'algorithme CAS.

Tutoriel recommandé : Tutoriel 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!

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