public class VolatileTest{
private static int MY_INT = 0;
public static void main(String[] args) {
new ChangeListener().start();
new ChangeMaker().start();
}
static class ChangeListener extends Thread {
@Override
public void run() {
int local_value = MY_INT;
while ( local_value < 10){
if( local_value!= MY_INT){
System.out.println(String.format("Got Change for MY_INT : [ %s ]",MY_INT));
local_value= MY_INT;
}
}
}
}
static class ChangeMaker extends Thread{
@Override
public void run() {
int local_value = MY_INT;
while (MY_INT <10){
System.out.println(String.format("Got Change for MY_INT : [ %s ]", local_value+1));
MY_INT = ++local_value;
try {
Thread.sleep(500);
} catch (InterruptedException e) { e.printStackTrace(); }
}
}
}
}
private static int MY_INT = 0; 没有Volatileg关键字修饰输出为 :
Got Change for MY_INT : [ 1 ]
Got Change for MY_INT : [ 2 ]
Got Change for MY_INT : [ 3 ]
Got Change for MY_INT : [ 4 ]
Got Change for MY_INT : [ 5 ]
Got Change for MY_INT : [ 6 ]
Got Change for MY_INT : [ 7 ]
Got Change for MY_INT : [ 8 ]
Got Change for MY_INT : [ 9 ]
Got Change for MY_INT : [ 10 ]
private static volatile int MY_INT = 0; 有Volatile关键字修饰输出为 :
Got Change for MY_INT : [ 1 ]
Got Change for MY_INT : [ 1 ]
Got Change for MY_INT : [ 2 ]
Got Change for MY_INT : [ 2 ]
Got Change for MY_INT : [ 3 ]
Got Change for MY_INT : [ 3 ]
Got Change for MY_INT : [ 4 ]
Got Change for MY_INT : [ 4 ]
Got Change for MY_INT : [ 5 ]
Got Change for MY_INT : [ 5 ]
Got Change for MY_INT : [ 6 ]
Got Change for MY_INT : [ 6 ]
Got Change for MY_INT : [ 7 ]
Got Change for MY_INT : [ 7 ]
Got Change for MY_INT : [ 8 ]
Got Change for MY_INT : [ 8 ]
Got Change for MY_INT : [ 9 ]
Got Change for MY_INT : [ 9 ]
Got Change for MY_INT : [ 10 ]
Got Change for MY_INT : [ 10 ]