
Lorsque nous parlerons de sécurité des threads, nous choisirons la méthode de verrouillage pour la résoudre. Les types de verrous en Java sont divisés en six types.Les deux méthodes de verrouillage les plus courantes que nous avons rencontrées sont le verrouillage et la synchronisation. C'est également la question de principe et de mécanisme la plus fréquemment posée dans les entretiens. Ci-dessous, nous allons vous montrer les questions d'entretien courantes en Java. Voyons si vous pouvez toutes y répondre.
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 de mémoire. À ce stade, la méthode de synchronisation de l'objet est exécutée dans plus d'un). un autre thread (remarque : est l'objet) générera une exclusion mutuelle
Méthode statique : équivalent au verrouillage de la classe (*.class est situé dans la zone de code, et 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),
À l'heure actuelle , tant que l'objet généré par cette classe est appelé, une exclusion mutuelle se produira lorsque cette méthode statique est appelée. Autrement dit, tous les objets de cette classe partagent un verrou.
2.Quels sont les types de serrures ?
(1) Verrouillage optimiste et verrou pessimiste
(2) Verrouillage rotatif et verrouillage anti-rotation
(3) Verrouillage réentrant et verrouillage non réentrant
(4) Serrure sans serrure et légère, serrure biaisée et serrure lourde
(5) Verrouillage mutex et verrouillage partagé
(6) Verrouillage équitable et verrouillage injuste
3. Plusieurs méthodes de synchronisation des threads
modification synchronisée
volatile implémente la synchronisation (seule la visibilité est garantie, pas l'atomicité)
Utiliser la variable locale ThreadLocal
Utiliser des classes atomiques ( AtomicInteger, AtomicBoolean...)
Utiliser le verrouillage
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 processeur, c'est-à-dire que le thread obtenait 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 le 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 de mise en œuvre du verrouillage optimiste est l'opération CAS (Compare and Swap).
5. Parlez des problèmes de sécurité des threads
La sécurité des threads est un problème dans le domaine du multithread. La sécurité des threads peut être simplement comprise comme une méthode ou une instance qui peut être utilisée sans problème dans un environnement multithread.
Dans la programmation multithread Java, plusieurs façons d'assurer la sécurité des threads Java sont proposées :
Le moyen le plus simple, utilisez le mot-clé Synchronisation
Utilisez les classes atomiques du package java.util.concurrent.atomic, telles que AtomicInteger
Utilisation des verrous du package java.util.concurrent.locks
Utiliser la collection thread-safe ConcurrentHashMap
Utilisez le mot-clé volatile pour garantir une visibilité variable
Ce qui précède est une introduction aux questions d'entretien sur les verrous en Java. Pour les points de connaissance que vous n'êtes pas clair, vous devez trouver des informations à temps pour les résoudre et renforcer votre mémoire du contenu du verrou.