一: 懒汉式
代码实现:
public class LazyManSingleTon{
private LazyManSingleTon(){}
private static LazyManSingleTon lmst;
public static synchronized LazyManSingleTon getInstance(){
if(lmst == null){
lmst = new LazyManSingleTon();
}
return lmst;
}
}
懒汉式优点: 使用时才会实例化, 不浪费内存空间, 无线程安全问题
懒汉式缺点: 使用同步锁, 效率低
二: 饿汉式
代码实现
public class HungryManSingleTon{
private HungryManSingleTon(){}
private static HungryManSingleTon hmst = new HungryManSingleTon();
public static HungrtManSingleTon getInstance(){
return hmst;
}
}
**饿汉式优点: **不会出现线程安全问题
**饿汉式缺点: **在类加载时实例化, 需要额外占用内存空间
三: 静态内部类实现单例
代码实现
public class InnerClassSingleTon{
private InnerClassSingleTon(){}
public static InnerClassSingleTon getInstance(){
return InnerClass.getInstance_in();
}
static class InnerClass{
private static InnerClassSingleTon icst = new InnerClassSingleTon();
private static InnerClassSingleTon getInstance_in(){
return icst;
}
}
}
**静态内部类实现单例的优点: **在调用内部类时才会实例化对象, 不占用额外内存, 线程安全, 效率高
四: 双重验证饿汉式
代码实现
public class DoubleCheckLazyManSingleTon{
private static DoubleCheckLazyManSingleTon dclmst;
private DoubleCheckLazyManSingleTon(){}
private static DoubleCheckLazyManSingleTon getInstance(){
if(dclmst == null){
synchronized(DoubleCheckLazyManSingleTon.class){
if(dclmst == null){
dclmst = new DoubleCheckLazyManSingleTon();
}
}
}
return dclmst;
}
}