且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

java单例的几种实现方法

更新时间:2021-10-18 14:58:54

java单例的几种实现方法:
方式1:

public class Something {

private Something() {}

private static class LazyHolder {
    private static final Something INSTANCE = new Something();
}

public static Something getInstance() {
    return LazyHolder.INSTANCE;
}

}
方式2:

public class Singleton {

private static final Singleton INSTANCE = new Singleton();

private Singleton() {}

public static Singleton getInstance() {
    return INSTANCE;
}

}
方式3:

public class Singleton {

private static final Singleton instance;

static {
    try {
        instance = new Singleton();
    } catch (Exception e) {
        throw new RuntimeException("Darn, an error occurred!", e);
    }
}

public static Singleton getInstance() {
    return instance;
}

private Singleton() {
    // ...
}

}
方式4:

public enum Singleton {

INSTANCE;
public void execute (String arg) {
    // Perform operation here 
}

}
方式5:

public class SingletonDemo {

private static volatile SingletonDemo instance;
private SingletonDemo() { }

public static SingletonDemo getInstance() {
    if (instance == null ) {
        synchronized (SingletonDemo.class) {
            if (instance == null) {
                instance = new SingletonDemo();
            }
        }
    }

    return instance;
}

}
方式6:

使用apache commons lang: LazyInitializer

public class ComplexObjectInitializer extends LazyInitializer {

 @Override
 protected ComplexObject initialize() {
     return new ComplexObject();
 }

}

// Create an instance of the lazy initializer
ComplexObjectInitializer initializer = new ComplexObjectInitializer();
...
// When the object is actually needed:
ComplexObject cobj = initializer.get();
方式7:

使用guava:

private static final Supplier tokenSup = Suppliers.memoize(new Supplier() {

    @Override
    public String get() {
        //do some init
        String result = xxx;
        return result;
    }
});

==============================================================================

本文转自被遗忘的博客园博客,原文链接:http://www.cnblogs.com/rollenholt/p/4774063.html,如需转载请自行联系原作者