java单例模式的实现方法是什么

   2024-11-05 9550
核心提示:Java单例模式的实现方法有以下几种:懒汉式(Lazy Initialization):在第一次使用时才创建实例。线程不安全版本的懒汉式实现如

Java单例模式的实现方法有以下几种:

懒汉式(Lazy Initialization):在第一次使用时才创建实例。线程不安全版本的懒汉式实现如下:
public class Singleton {    private static Singleton instance;    private Singleton(){}    public static Singleton getInstance(){        if(instance == null){            instance = new Singleton();        }        return instance;    }}

可以通过在getInstance()方法上加锁synchronized来实现线程安全的懒汉式单例模式,但是会影响效率:

public class Singleton {    private static Singleton instance;    private Singleton(){}    public static synchronized Singleton getInstance(){        if(instance == null){            instance = new Singleton();        }        return instance;    }}
饿汉式(Eager Initialization):在类加载时就创建实例,线程安全。实现如下:
public class Singleton {    private static Singleton instance = new Singleton();    private Singleton(){}    public static Singleton getInstance(){        return instance;    }}

由于在类加载时就创建实例,因此无法实现延迟加载。

双重检查锁定(Double Checked Locking):在懒汉式的基础上,进行双重检查,确保线程安全且效率较高:
public class Singleton {    private volatile static Singleton instance;    private Singleton(){}    public static Singleton getInstance(){        if(instance == null){            synchronized (Singleton.class){                if(instance == null){                    instance = new Singleton();                }            }        }        return instance;    }}

使用volatile修饰instance变量可以保证多线程环境下的可见性和有序性。

静态内部类(Static Inner Class):利用类的静态内部类来实现懒汉式的延迟加载和线程安全:
public class Singleton {    private Singleton(){}    private static class SingletonHolder{        private static final Singleton INSTANCE = new Singleton();    }    public static Singleton getInstance(){        return SingletonHolder.INSTANCE;    }}

静态内部类只有在第一次使用时才会被加载,从而实现了延迟加载。

枚举(Enum):使用枚举类来实现单例模式,可以保证线程安全和防止反射攻击:
public enum Singleton {    INSTANCE;    public void doSomething(){        // do something    }}

 
举报打赏
 
更多>同类维修大全
推荐图文
推荐维修大全
点击排行

网站首页  |  关于我们  |  联系方式网站留言    |  赣ICP备2021007278号