Heim > Java > javaLernprogramm > Warum ist „i' in Java nicht atomar?

Warum ist „i' in Java nicht atomar?

DDD
Freigeben: 2024-11-26 14:48:11
Original
473 Leute haben es durchsucht

Why Isn't `i  ` Atomic in Java?

Warum ist i in Java nicht atomar?

In Java ist der i-Operator nicht atomar, was bedeutet, dass, wenn zwei Threads gleichzeitig versuchen, dieselbe Variable zu erhöhen, der Das Ergebnis ist möglicherweise falsch. Dies liegt daran, dass die i-Operation aus drei separaten Schritten besteht:

  1. Lesen des aktuellen Werts der Variablen
  2. Erhöhen des Werts
  3. Schreiben des neuen Werts zurück in die Variable

Wenn zwei Threads diese Schritte gleichzeitig ausführen, ist es möglich, dass ein Thread den Wert liest, bevor der andere Thread inkrementiert hat Es. Dies kann zu Datenbeschädigungen führen.

Betrachten Sie beispielsweise den folgenden Code:

class Test {
  private static int total = 0;

  public static void main(String[] args) {
    Thread thread1 = new Thread(new Runnable() {
      @Override
      public void run() {
        for (int i = 0; i < 100000; i++) {
          total++;
        }
      }
    });

    Thread thread2 = new Thread(new Runnable() {
      @Override
      public void run() {
        for (int i = 0; i < 100000; i++) {
          total++;
        }
      }
    });

    thread1.start();
    thread2.start();

    thread1.join();
    thread2.join();

    System.out.println("Total: " + total);
  }
}
Nach dem Login kopieren

Wenn dieser Code ausgeführt wird, wird erwartet, dass er 200000 ausgibt, es kann jedoch tatsächlich sein, dass er einen niedrigeren Wert ausgibt Wert aufgrund der nicht-atomaren Natur des i-Operators.

Um sicherzustellen, dass Multithread-Code atomar auf gemeinsam genutzte Variablen zugreift, ist die Verwendung der Synchronisierung erforderlich Mechanismen wie Sperren oder atomare Variablen. Das synchronisierte Schlüsselwort kann verwendet werden, um den Zugriff auf Codeblöcke zu synchronisieren, während die AtomicInteger-Klasse einen atomaren Ganzzahltyp bereitstellt.

Das obige ist der detaillierte Inhalt vonWarum ist „i' in Java nicht atomar?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage