Heim >Java >javaLernprogramm >Warum und wie sollten Sie String-Objekte in Java synchronisieren?

Warum und wie sollten Sie String-Objekte in Java synchronisieren?

Original
2024-11-15 14:27:021053Durchsuche

Why and How Should You Synchronize on String Objects in Java?

Synchronisieren von String-Objekten in Java

Das Synchronisieren von Vorgängen in Multithread-Anwendungen mithilfe von String-Objekten kann aufgrund der Existenz mehrerer Instanzen eine Herausforderung darstellen des gleichen Zeichenfolgenwerts. Um eine ordnungsgemäße Synchronisierung des gewünschten Cache-Schlüssels sicherzustellen, ist es wichtig, die intern()-Methode für das String-Objekt zu verwenden.

final String key = "Data-" + email;
final String internedKey = key.intern();

synchronized(internedKey) { ... }

Die intern()-Methode gibt eine kanonische Darstellung der Zeichenfolge zurück und stellt so sicher, dass alle Referenzen vorhanden sind auf diesen Zeichenfolgenwert verweist auf dasselbe Objekt. Dies ermöglicht eine konsistente Synchronisierung über mehrere Threads hinweg.

Die Synchronisierung auf internen Zeichenfolgen kann jedoch neue Leistungsaspekte mit sich bringen. Intern kann die VM während des internen Prozesses eine Sperre erhalten, was möglicherweise zu Leistungseinbußen führt.

Um potenzielle Probleme zu mindern, sollten Sie die Verwendung eines mit jedem Schlüssel verknüpften Sperrobjekts anstelle des Schlüssels selbst in Betracht ziehen. Dieser Ansatz vermeidet den potenziellen Mehraufwand, der mit der Internierung von Zeichenfolgen verbunden ist.

Map<String, Object> lockMap = new HashMap<>();
Object lock = lockMap.get(key);

if (lock == null) {
    lock = new Object();
    lockMap.put(key, lock);
}

synchronized(lock) { ... }

Bei diesem Ansatz ist jeder Schlüssel einem eindeutigen Sperrobjekt zugeordnet, wodurch sichergestellt wird, dass jeweils nur ein Thread auf den entsprechenden Cache-Vorgang zugreifen kann.

Das obige ist der detaillierte Inhalt vonWarum und wie sollten Sie String-Objekte in Java synchronisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn