package Singleton;
public class SingletonOne {
private SingletonOne(){}
private static class LazyHolder{
private static final SingletonOne INSATNCE=new SingletonOne();
}
public static SingletonOne getInstance(){
return LazyHolder.INSATNCE;
}
}
package Singleton;
public class SingletonTwo {
private SingletonTwo(){};
private static final SingletonTwo INSTANCE=new SingletonTwo();
public static SingletonTwo getInstance(){
return INSTANCE;
}
}
package Singleton;
public class SingletonThree {
private static final SingletonThree instance ;
static{
try{
instance=new SingletonThree();
}catch(Exception e){
throw new RuntimeException("an error occurred!");
}
}
public static SingletonThree getInsance(){
return instance;
}
private SingletonThree(){}
}
package Singleton;
public enum SingletonFour {
INSTANCE;
public void execute(String arg){
}
}
package Singleton;
public class SingletonFive {
private static volatile SingletonFive instance;
private SingletonFive(){}
public static SingletonFive getInstance(){
if(instance==null){
synchronized (SingletonFive.class) {
if(instance==null){
instance=new SingletonFive();
}
}
}
return instance;
}
}
使用apache commons lang: LazyInitializer
public class SingletonSix extends LazyInitializer<ComplexObject> {
@Override
protected ComplexObject initialize() {
return new ComplexObject();
}
}
// Create an instance of the lazy initializer
SingletonSix initializer = new SingletonSix();
...
// When the object is actually needed:
ComplexObject cobj = initializer.get();
使用guava:
private static final Supplier<String> tokenSup = Suppliers.memoize(new Supplier<String>() {
@Override
public String get() {
//do some init
String result = xxx;
return result;
}
});
联系客服