JAVA基礎(chǔ)(singleton的幾種實(shí)現(xiàn)方式)

字號:

1.Eager
    public class EagerInitialization {
    private static Resource resource = new Resource();
    public static Resource getResource() {
    return resource;
    }
    static class Resource {
    }
    }
    2.Lazy
    public class SafeLazyInitialization {
    private static Resource resource;
    public synchronized static Resource getInstance() {
    if (resource == null)
    resource = new Resource();
    return resource;
    }
    static class Resource {
    }
    }
    3.double checked locking singleton ( 僅適用于java 5.0 以上版本)
    public class DoubleCheckedLockingSingleton {
    //java5.0 修改了內(nèi)存模型, 可以保證使用volatile 聲明的變量對于double checked locking是正確的
    private volatile static DoubleCheckedLockingSingleton uniqueInstance;
    private DoubleCheckedLockingSingleton() {}
    public static DoubleCheckedLockingSingleton getInstance() {
    if (uniqueInstance == null) {
    synchronized (DoubleCheckedLockingSingleton.class) {
    if (uniqueInstance == null) {
    uniqueInstance = new DoubleCheckedLockingSingleton();
    }
    }
    }
    return uniqueInstance;
    }
    }
    4.Lazy initialization holder class idiom
    public class ResourceFactory {
    //增加一個helper類來初始化對象
    private static class ResourceHolder {
    public static Resource resource = new Resource();
    }
    public static Resource getResource() {
    return ResourceFactory.ResourceHolder.resource;
    }
    static class Resource {
    }
    }
    以上四種方法都是線程安全的實(shí)現(xiàn)方式