volatile 對於基本類型的包裝類可見性失效

我發現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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章