我發現volatile 對於基本類型的包裝類不可見,當線程A修改了變量,如果線程B去獲取這個變量的值,線程A無法看見線程B的修改,如果改成其他數據類型的數據,則沒有問題。這有點奇怪。
接下來來個簡單例子測試一下。
public class VolatileTestA extends Thread{
private volatile Integer i;
public VolatileTestA(Integer i) {
super();
this.i = i;
}
@Override
public void run() {
i++;
}
}
再建立一個main類
public class VolatileTest extends Thread{
private volatile static Integer f = new Integer(0);
@Override
public void run() {
System.out.println(f);
}
public static void main(String[] args) throws InterruptedException {
new VolatileTestA(f).start();
Thread.sleep(1000);
new VolatileTest().start();
}
}
這樣輸出的結果是0