Java >> Java Tutorial >  >> Java

Threadsicherer Code

Ja, genau wie jeder andere Programmierer wurde ich gefragt:„Ist dieser Code-Thread sicher?“ und oft habe ich in meinem kopf nachgedacht, was das eigentlich bedeutet. Ehrlich gesagt bin ich nicht kompetent genug in der Multithreading-Programmierung und sogar in der Beantwortung dieser Frage. Aber irgendwann erfährt man davon und sagt:„Ja, der Code ist Thread-sicher und wird bei gleichzeitiger Ausführung durch mehrere Threads korrekt ausgeführt.“

Wikipedia sagt über Thread-Sicherheit

„Ein Stück Code ist threadsicher wenn es nur gemeinsam genutzte Datenstrukturen so manipuliert, dass eine sichere Ausführung durch mehrere Threads gleichzeitig gewährleistet ist „

Die meisten Probleme treten in Umgebungen mit mehreren Threads auf, wenn auf gemeinsame Daten zugegriffen wird.

Hier ist ein Beispiel für den Code, der in einer Singlethread-Umgebung sicher sein kann, aber nicht in einer Multithread-Umgebung.

public class Counter
{
   private static int count = 0;
   public static int incrementCount()
   {
      return count++;
   }
}

count ist hier eine gemeinsam genutzte Integer-Variable. In einer Umgebung mit mehreren Threads kann es während des Aktualisierungsvorgangs den richtigen Wert verlieren. Inkrementoperation für Zählung führt Lesen, Hinzufügen und Aktualisieren durch. Falls zwei Threads auf incrementCount zugreifen method und nicht synchronisiert, können sie den falschen Wert von count verursachen.

Wie man diesen Code Thread-sicher macht

public class Counter
{
   private static int count = 0;
   public static synchronized int incrementCount()
   {
      return count++;
   }
}

synchronized fügt diesen gegenseitigen Ausschluss zwischen Threads beim Zugriff auf incrementCount hinzu Methode. Es kann also immer nur ein Thread auf die Methode zugreifen. Anstatt die gesamte Methode zu synchronisieren, kann auch nur ein Teil des Codes synchronisiert werden.

Schlussfolgerung

Ich habe gezeigt, wie wir Thread-sichere Programmierung schreiben können. Wenn Ihnen dieser Beitrag gefallen hat, abonnieren Sie meinen Blog. Wenn Sie mehr über Thread-Sicherheit erfahren möchten, lesen Sie diesen Beitrag.


Java-Tag