//資源(把
volatile去掉進行測試
)
public class Demo {
volatile int i =1;
}
//測試
public static void main(String[] args) throws InterruptedException {
//一份資源
Demo demo = new Demo();
//一個線程對資源進行修改
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5000);
demo.i+=1;
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
//一個線程服務查看資源有沒有修改
new Thread(new Runnable() {
@Override
public void run() {
while(true){
if (demo.i==2){
/**
* 1、其他線程對變量的修改,可以及時反應在當前線程中;
* 2、確保當前線程對volatile變量的修改,能及時寫回到共享內存中,并被其他線程所見;
* 3、使用volatile聲明的變量,編譯器會保證其有序性。
*/
System.out.println("變了!");
}
}
}
}).start();
}