Maison  >  Article  >  Java  >  Exemple d'analyse de questions d'entretien sur le verrouillage en Java

Exemple d'analyse de questions d'entretien sur le verrouillage en Java

WBOY
WBOYavant
2023-05-05 08:13:061423parcourir

1. La différence entre les effets synchronisés sur les méthodes statiques et les méthodes non statiques

Méthodes non statiques :

Verrouiller l'objet (peut être compris comme verrouiller la mémoire de cet objet. Notez qu'il ne s'agit que de cette mémoire, d'autres objets similaires auront leurs propres verrous mémoire), à ​​ce moment, exécuter la méthode de synchronisation de l'objet dans plus d'un autre thread (remarque : c'est l'objet) générera une exclusion mutuelle

Méthode statique : équivalent à l'ajout d'un verrou sur la classe (*.class Située dans la zone de code, la méthode statique est située dans la zone statique. Les objets générés par cette classe partagent cette méthode statique, donc N objets se disputent cette mémoire),

À ce moment, tant comme il s'agit d'un objet généré par cette classe, cette méthode statique est appelée L'exclusion mutuelle se produira à tout moment. Autrement dit, tous les objets de cette classe partagent un verrou.

2. Quels sont les types de verrous

(1) Verrouillage optimiste & verrouillage pessimiste

(2) Verrouillage rotatif & verrouillage non rotatif

(3) Verrouillage réentrant & verrouillage non réentrant

( 4 ) Verrous sans verrouillage et légers, verrous biaisés et verrous lourds

(5) Verrous d'exclusion mutuelle et verrous partagés

(6) Verrous équitables et verrous injustes

Plusieurs façons de synchronisation des threads

modification synchronisée

.

volatile réalise la synchronisation (seule la visibilité est garantie, pas l'atomicité)

Utilisez la variable locale ThreadLocal

Utilisez les classes atomiques (AtomicInteger, AtomicBoolean...)

Utilisez Lock

Utilisez la classe conteneur (BlockingQueue), ConcurrentHashMap)

4. La différence entre les mécanismes synchronisés et de verrouillage

synchronisé utilisait à l'origine le mécanisme de verrouillage pessimiste du CPU, c'est-à-dire que le thread obtient un verrou exclusif. Un verrou exclusif signifie que les autres threads ne peuvent compter que sur le blocage pour attendre que le thread libère le verrou.

Lock utilise une méthode de verrouillage optimiste. Le verrouillage dit optimiste consiste à terminer une opération sans verrouiller à chaque fois, mais en supposant qu'il n'y a pas de conflit. Si elle échoue en raison d'un conflit, elle sera réessayée jusqu'à ce qu'elle réussisse. Le mécanisme mis en œuvre par le verrouillage optimiste est l'opération CAS (Compare and Swap).

5. Parlons de la question de la sécurité des threads

La sécurité des threads est un problème dans le domaine du multi-thread. La sécurité des threads peut être simplement comprise comme une méthode ou une instance qui peut être utilisée dans un multi-thread. environnement sans problèmes.

Dans la programmation multithread Java, plusieurs façons d'assurer la sécurité des threads Java sont proposées :

La manière la plus simple est d'utiliser le mot-clé Synchronization

Utilisez les classes atomiques du package java.util.concurrent.atomic, telles que AtomicInteger

Utilisez les verrous du package java.util.concurrent.locks

Utilisez la collection thread-safe ConcurrentHashMap

Utilisez le mot-clé volatile pour garantir une visibilité variable

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer