Ich frage nur in Threading Perspektive ... wahrscheinlich beantwortet viele Male aber bitte helfen Sie mir, dies zu verstehen.Statische Variable vs Volatile
Mit Bezug auf die hier posten Volatile Vs Static in java
eine statische Variable Wert fragen auch einen Wert für alle Fäden sein wird, dann, warum wir für flüchtige gehen sollte? Ich fand folgendes Beispiel:
public class VolatileExample {
public static void main(String args[]) {
new ExampleThread("Thread 1 ").start();
new ExampleThread("Thread 2 ").start();
}
}
class ExampleThread extends Thread {
private static volatile int testValue = 1;
public ExampleThread(String str){
super(str);
}
public void run() {
for (int i = 0; i < 3; i++) {
try {
System.out.println(getName() + " : "+i);
if (getName().compareTo("Thread 1 ") == 0)
{
testValue++;
System.out.println("Test Value T1: " + testValue);
}
if (getName().compareTo("Thread 2 ") == 0)
{
System.out.println("Test Value T2: " + testValue);
}
Thread.sleep(1000);
} catch (InterruptedException exception) {
exception.printStackTrace();
}
}
}
}
Ausgang:
Thread 1 : 0
Test Value T1: 2
Thread 2 : 0
Test Value T2: 2
Thread 1 : 1
Test Value T1: 3
Thread 2 : 1
Test Value T2: 3
Thread 1 : 2
Test Value T1: 4
Thread 2 : 2
Test Value T2: 4
Wenn ich die statische aus dem Testvalue entfernen, so erhält man:
Thread 1 : 0
Test Value T1: 2
Thread 2 : 0
Test Value T2: 1
Thread 1 : 1
Test Value T1: 3
Thread 2 : 1
Test Value T2: 1
Thread 1 : 2
Test Value T1: 4
Thread 2 : 2
Test Value T2: 1
Warum Faden 2 nicht den aktualisierten Wert zu lesen? Wenn es statisch gemacht werden muss, was ist der Gebrauch von volatilen?
Kann jemand Link zu einem guten Beispiel von volatile geben, wo diese Variable nicht statisch deklariert wird.
Dank
Die akzeptierte Rolle Antworte auf den Beitrag, den du verlinkt hast, um deine Frage zu beantworten. –
Lesen Sie den Rest der Antwort - esp. das bisschen über ** statische flüchtige ** .. – Nim
'statisch' =/=' final'. –