深刻理解Java中的volatile關鍵字

本文就圍繞volatile展開,主要介紹volatile的用法、volatile的原理,以及volatile是如何提供可見性和有序性保障的等。編程

volatile這個關鍵字,不單單在Java語言中有,在不少語言中都有的,並且其用法和語義也都是不盡相同的。尤爲在C語言、C++以及Java中,都有volatile關鍵字。均可以用來聲明變量或者對象。下面簡單來介紹一下Java語言中的volatile關鍵字。多線程

volatile的用法併發

volatile一般被比喻成"輕量級的synchronized",也是Java併發編程中比較重要的一個關鍵字。和synchronized不一樣,volatile是一個變量修飾符,只能用來修飾變量。沒法修飾方法及代碼塊等。線程

volatile的用法比較簡單,只須要在聲明一個可能被多線程同時訪問的變量時,使用volatile修飾就能夠了。code

public class Singleton {  

    private volatile static Singleton singleton;  

    private Singleton (){}  

    public static Singleton getSingleton() {  

    if (singleton == null) {  

        synchronized (Singleton.class) {  

        if (singleton == null) {  

            singleton = new Singleton();  

        }  

        }  

    }  

    return singleton;  

    }  

}  

如以上代碼,是一個比較典型的使用雙重鎖校驗的形式實現單例的,其中使用volatile關鍵字修飾可能被多個線程同時訪問到的singleton。對象

相關文章
相關標籤/搜索