English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Kann man mit dem Schlüsselwort 'volatile' in Java volatile in ein Array umwandeln?

Der volatile Modifikator weist der JVM an, dass Threads, die auf volatile Variablen zugreifen, immer aus dem Speicher Daten abrufen sollten. Das bedeutet, dass Threads volatile Variablen nicht cachen sollten.

Der Zugriff auf volatile Variablen synchronisiert alle in den Hauptspeicher gecachten Variablenkopien. Veränderliche Variablen können nur auf Objekttypen oder private Instanzvariablen angewendet werden. Eine volatile Objektreferenz kann null sein.

Beispiel

public class MyRunnable implements Runnable {
   private volatile boolean active;
   public void run() {
      active = true;
      while (active) { // line 1
         //Einige Code hier
      }
   }
   public void stop() {
      active = false; // line 2
   }
}

Macht das Array volatil

Obwohl wir das Array als volatile deklarieren, haben die Elemente des Arrays kein volatile Verhalten.

Um dieses Problem zu lösen, stellt Java zwei Klassen bereit, nämlich AtomicIntegerArray und AtomicLongArray, die Arrays darstellen, die atomare Verpackungen auf den (jeweiligen) Variablen haben und deren Elemente automatisch aktualisiert werden.

Das bedeutet, dass die Elemente der Arrays, die von diesen Klassen dargestellt werden, als volatile Variablen zugänglich sind. Diese Klassen bietenget()undset()Variablen verwenden, um die Werte für jeden Element zu检索 oder zuweisen.

Da Atom-Wrapper für Integer- und Long-Typen sowie für die übrigen Datentypen verfügbar sind, muss der Referenzwert des Arrays bei jeder Zuweisung eines Elements neu zugewiesen werden.

volatile int[] myArray = new int[3];
myArray [0] = 100;
myArray = myArray;
myArray [1] = 50;
myArray = myArray;
myArray [2] = 150;
myArray = myArray;