Wenn wir über Thread-Sicherheit sprechen, wählen wir die Sperrmethode, um das Problem zu lösen. Die Arten von Sperren in Java sind in sechs Arten unterteilt. Die beiden häufigsten Sperrmethoden, auf die wir gestoßen sind, sind Sperren und Synchronisierungen. Dies ist auch die in Interviews am häufigsten gestellte Frage nach dem Prinzip und Mechanismus. Im Folgenden zeigen wir Ihnen die häufigsten Interviewfragen in Java. Mal sehen, ob Sie sie alle beantworten können.
1. Der Unterschied zwischen synchronisierten Effekten auf statische Methoden und nicht statische Methoden
Nichtstatische Methoden:
Sperren des Objekts (kann als Sperren des Speichers dieses Objekts verstanden werden. Beachten Sie, dass es sich nur um diesen Speicher handelt, andere ähnliche Objekte haben ihre eigenen Speichersperren. Zu diesem Zeitpunkt wird die Synchronisierungsmethode des Objekts in mehr als einer Ausführung ausgeführt Ein anderer Thread (Hinweis: ist das Objekt) erzeugt einen gegenseitigen Ausschluss
Statische Methode : Entspricht dem Sperren der Klasse (*.class befindet sich im Codebereich und die statische Methode befindet sich im statischen Bereich. Die von dieser Klasse generierten Objekte teilen sich diese statische Methode, sodass N Objekte um diesen Speicher konkurrieren.)
Zu diesem Zeitpunkt tritt beim Aufruf dieser statischen Methode ein gegenseitiger Ausschluss auf, solange das von dieser Klasse generierte Objekt aufgerufen wird. Das heißt, alle Objekte dieser Klasse teilen sich eine Sperre.
2.Welche Schlosstypen gibt es?
(1) Optimistische Sperre und pessimistische Sperre
(2) Spin-Lock und Non-Spin-Lock
(3) Wiedereintrittssperre und nicht wiedereintrittsfähige Sperre
(4) Schlossloses und leichtes Schloss, vorgespanntes Schloss und schweres Schloss
(5) Mutex-Sperre und gemeinsame Sperre
(6) Faire Sperre und unfaire Sperre
3. Mehrere Methoden zur Thread-Synchronisation
synchronisierte Änderung
volatile implementiert die Synchronisierung (nur Sichtbarkeit ist garantiert, keine Atomizität)
Verwenden Sie die lokale Variable ThreadLocal
Verwenden Sie atomare Klassen ( AtomicInteger, AtomicBoolean...)
Verwenden Sie Sperren
Verwenden Sie die Containerklasse ( BlockingQueue, ConcurrentHashMap)
4. Der Unterschied zwischen Synchron- und Sperrmechanismen
Synchronisiert verwendete ursprünglich den pessimistischen CPU-Sperrmechanismus, dh der Thread erhielt eine exklusive Sperre. Eine exklusive Sperre bedeutet, dass andere Threads nur auf die Blockierung warten können, bis der Thread die Sperre aufhebt.
Lock verwendet optimistisches Sperren. Die sogenannte optimistische Sperre besteht darin, einen Vorgang jedes Mal ohne Sperre abzuschließen, jedoch unter der Annahme, dass kein Konflikt vorliegt. Wenn er aufgrund eines Konflikts fehlschlägt, wird er wiederholt, bis er erfolgreich ist. Der Mechanismus zur Implementierung optimistischer Sperren ist die CAS-Operation (Compare and Swap).
5. Sprechen Sie über Thread-Sicherheitsprobleme
Thread-Sicherheit ist ein Thema im Bereich Multithreading. Thread-Sicherheit kann einfach als Methode oder Instanz verstanden werden, die problemlos in einer Multithread-Umgebung verwendet werden kann.
Bei der Java-Multithread-Programmierung stehen mehrere Möglichkeiten zum Erreichen der Java-Thread-Sicherheit zur Verfügung:
Am einfachsten ist es, das Schlüsselwort Synchronization zu verwenden
Verwenden Sie atomare Klassen aus dem Paket java.util.concurrent.atomic, z. B. AtomicInteger
Verwendung von Sperren aus dem Paket java.util.concurrent.locks
Verwenden Sie die Thread-sichere Sammlung ConcurrentHashMap
Verwenden Sie das Schlüsselwort volatile, um die Sichtbarkeit der Variablen sicherzustellen
Das Obige ist eine Einführung in die Interviewfragen zu Sperren in Java. Für Wissenspunkte, über die Sie sich nicht im Klaren sind, müssen Sie rechtzeitig Informationen finden, um diese zu lösen und Ihr Gedächtnis für den Sperrinhalt zu stärken.