免费网站建设排行榜,企业网站设置,wordpress要装iis吗,网站域名如何备案信息文章目录 单例模式的实现方法--Java1. 饿汉式单例模式#xff08;在类加载时创建实例#xff09;#xff1a;2. 懒汉式单例模式#xff08;在需要时创建实例#xff0c;线程不安全#xff09;#xff1a;3. 静态内部类方式#xff08;懒加载#xff0c;且线程安全在类加载时创建实例2. 懒汉式单例模式在需要时创建实例线程不安全3. 静态内部类方式懒加载且线程安全4. 枚举方式5. 使用容器实现单例 小结 单例模式的实现方法–Java
在Java中可以使用多种方式来实现单例模式。以下是一些常见的单例模式实现方式
1. 饿汉式单例模式在类加载时创建实例
public class Singleton {private static final Singleton instance new Singleton();private Singleton() {// 私有构造方法}public static Singleton getInstance() {return instance;}
}2. 懒汉式单例模式在需要时创建实例线程不安全
public class Singleton {private static Singleton instance;private Singleton() {// 私有构造方法}public static Singleton getInstance() {if (instance null) {instance new Singleton();}return instance;}
}这种实现方式在多线程环境下可能会导致多个线程创建多个实例。为了确保线程安全可以使用双重检查锁定Double-Checked Locking
public class Singleton {private static volatile Singleton instance;private Singleton() {// 私有构造方法}public static Singleton getInstance() {if (instance null) {synchronized (Singleton.class) {if (instance null) {instance new Singleton();}}}return instance;}
}3. 静态内部类方式懒加载且线程安全
public class Singleton {private Singleton() {// 私有构造方法}private static class SingletonHolder {private static final Singleton instance new Singleton();}public static Singleton getInstance() {return SingletonHolder.instance;}
}这种方式实现了懒加载且线程安全因为静态内部类只会加载一次。
4. 枚举方式
public enum Singleton {INSTANCE;public void doSomething() {// 单例实例方法}
}这是一种非常简单且线程安全的方式枚举保证了只有一个枚举常量。
5. 使用容器实现单例
import java.util.HashMap;
import java.util.Map;public class SingletonContainer {private static MapString, Object singletonMap new HashMap();public static void registerSingleton(String key, Object singleton) {if (!singletonMap.containsKey(key)) {singletonMap.put(key, singleton);}}public static Object getSingleton(String key) {return singletonMap.get(key);}
}这种方式允许你将多个单例对象存储在一个容器中然后根据需要检索它们。
小结
选择哪种方式取决于你的应用程序需求和线程安全要求。
在多线程环境中双重检查锁定、静态内部类和枚举方式是比较常用的线程安全实现方式。