当前位置: 代码迷 >> 综合 >> java单例模式创建
  详细解决方案

java单例模式创建

热度:34   发布时间:2024-01-26 12:02:30.0

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;}
}

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