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!