java单例模式创建

1,饿汉式

public class Singleton1{
private static Singleton1 instance = new Singleton1();
private Singleton1();
public static Singleton1 getInstance(){
    return instance;
}}

线程安全,调用效率高,无法延时加载

缺点:单例还没有使用时,就已经初始化,会造成资源浪费。

2,懒汉式

public class Singleton2{
private static Singleton2 instance = null;
private Singleton2();
public static synchronized getInstance()
 {
   if(instance == null){
        instance = new Singleton2();
   }
   return instance;
 }
}

线程安全,调用效率低,可以延时加载。

总结:静态内部类调用的方式最优。

缺点:getInstance()方法加锁,只能同步调用,调用效率低。

3,双重锁判断机制

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

存在问题:由于new 对象无法保证原子性,可能会出现空指针异常。

4,静态内部类调用

public class Singleton4{
private static class Singletoninner{
  private static final Singleton4 instance = new Singleton4();
  }
private Singleton4();
public static Singleton4 getInstance(){
  return Singletoninner.instance;
  }
}

线程安全,调用效率高,可以延时加载。

扫描二维码关注公众号,回复: 8720527 查看本文章
发布了1 篇原创文章 · 获赞 0 · 访问量 16

猜你喜欢

转载自blog.csdn.net/wangyan_wy/article/details/104045806