Der synchronisierte Block von Java-Funktionen erreicht Thread-Sicherheit, indem er Synchronisationssperren erhält. Wenn ein Thread den synchronisierten Block betritt, können andere Threads nicht eintreten, wodurch sichergestellt wird, dass der Zugriff auf gemeinsam genutzte Daten threadsicher ist. Spezifische Schritte: Deklarieren Sie eine synchronisierte Methode oder einen synchronisierten Codeblock und verwenden Sie das synchronisierte Schlüsselwort. Wenn ein Thread einen synchronisierten Block betritt, erhält er eine Synchronisationssperre. Andere Threads können nicht auf die Daten im synchronisierten Block zugreifen, bis der erste Thread die Synchronisationssperre aufhebt. Ein synchronisierter Block enthält nur den Code, der synchronisiert werden muss.
Wie erreicht man Thread-Sicherheit in synchronisierten Blöcken von Java-Funktionen?
Synchronisierte Blöcke sind syntaktischer Zucker, der verwendet wird, um nicht-threadsichere Funktionen in einer Multithread-Umgebung threadsicher zu machen. Es handelt sich im Wesentlichen um eine Mutex-Sperre. Wenn ein Thread einen synchronisierten Block betritt, erhält er die synchronisierte Sperre, und kein anderer Thread kann in den synchronisierten Block eintreten, bis dieser Thread die Sperre aufhebt.
Syntax
public synchronized void myFunc() { // 临界区代码 }
Praktischer Fall
Angenommen, wir haben eine nicht threadsichere Funktion increment()
, die einen Zählerwert um 1 erhöht. Wenn mehrere Threads diese Funktion gleichzeitig aufrufen, ist der Zählerwert möglicherweise falsch. Wir können synchronisierte Blöcke verwenden, um dieses Problem zu lösen: increment()
,它将一个计数器值加 1。如果多个线程同时调用此函数,则计数器值可能会发生错误。我们可以使用同步块来解决这个问题:
private int counter; public synchronized void increment() { counter++; }
这样,当一个线程调用 increment()
函数时,它会获取对 counter
的独占锁。其他线程在第一个线程释放该锁之前都无法访问 counter
,从而确保对 counter
的访问是线程安全的。
需要注意的是:
synchronized
rrreeeincrement()
aufruft, eine exklusive Sperre für counter
. Kein anderer Thread kann auf counter
zugreifen, bis der erste Thread die Sperre aufhebt, wodurch sichergestellt wird, dass der Zugriff auf counter
threadsicher ist. synchronized
nur zum Synchronisieren von Methoden oder Codeblöcken verwenden, nicht von Klassen. Das obige ist der detaillierte Inhalt vonWie erreicht man Thread-Sicherheit in synchronisierten Blöcken von Java-Funktionen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!