1.6 Double Check and Lock Singleton

根據1.3節提到的雙重鎖定機制, 這邊附上範例:

package idv.design.pattern.singleton.doublecheck;

/**
 * @author Carl Lu
 */
public class Singleton {

    /*
     * With volatile, the variable value will not be cached by local thread,
     * all the read/write operations are against the shared memory so that
     * we can ensure threads can handle the variable properly.
     *
     * This pattern is also called "DCL".
     */
    private volatile static Singleton instance = null;

    private Singleton() {

    }

    public static Singleton getInstance() {
        // First check
        if (instance == null) {
            synchronized (Singleton.class) {
                // Second check
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }

}

原始碼點我

其實, 這邊使用volatile背後的意義, 遠比這裡表面上看到的要來得複雜, 我寫在這邊, 有興趣的話可以看看.

Last updated

Was this helpful?