using volatile keyword

Soweit ich weiß, wird eine Variable, die als flüchtig deklariert wird, nicht im lokalen Cache gespeichert. Immer wenn ein Thread die Werte aktualisiert, wird dies im Hauptspeicher aktualisiert. Andere Threads können also auf den aktualisierten Wert zugreifen.

Aber im folgenden Programm zeigen sowohl flüchtige als auch nichtflüchtige Variablen den gleichen Wert an.

Die flüchtige Variable wird für den zweiten Thread nicht aktualisiert. Kann jemand bitte erklären, warum testValue nicht geändert wird.

class ExampleThread extends Thread {
    private int testValue1;
    private volatile int testValue;
    public ExampleThread(String str){
      super(str);
    }
    public void run() {
    if (getName().equals("Thread 1 "))
    {
        testValue = 10;
        testValue1= 10;
        System.out.println( "Thread 1 testValue1 : " + testValue1);
        System.out.println( "Thread 1 testValue : " + testValue);
    }
    if (getName().equals("Thread 2 "))
    {
        System.out.println( "Thread 2 testValue1 : " + testValue1);
        System.out.println( "Thread 2 testValue : " + testValue);
    }               
}
}

public class VolatileExample {
    public static void main(String args[]) {
        new ExampleThread("Thread 1 ").start();
        new ExampleThread("Thread 2 ").start();
    }
}


output:
Thread 1 testValue1 : 10
Thread 1 testValue : 10
Thread 2 testValue1 : 0
Thread 2 testValue : 0

Antworten auf die Frage(6)

Ihre Antwort auf die Frage