泰安网站建设入门推荐,wordpress安装数据库端口,网站建设数据库的选择,在网站上做宣传基本概念
在软件开发中#xff0c;单例模式是一种常见的设计模式#xff0c;用于确保一个类只有一个实例#xff0c;并提供全局访问点。单例模式在需要确保只有一个对象实例存在的场景中非常有用#xff0c;例如数据库连接、线程池、日志记录器等。 单例模式的核心思想是通…基本概念
在软件开发中单例模式是一种常见的设计模式用于确保一个类只有一个实例并提供全局访问点。单例模式在需要确保只有一个对象实例存在的场景中非常有用例如数据库连接、线程池、日志记录器等。 单例模式的核心思想是通过限制类的实例化过程使得在整个应用程序中只有一个实例存在。 5种实现方式
Java设计单例模式关键要点私有构造方法、静态变量保存唯一实例、静态方法返回类实例
1. 懒汉式线程不安全
这种方式在第一次使用时才创建对象实例如果多个线程同时访问getInstance()方法可能会创建多个实例线程不安全
public class Singleton {private static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance null) {instance new Singleton();}return instance;}
}
懒汉式线程安全使用synchronized关键字
为了解决懒汉式线程不安全的问题可以使用synchronized关键字来保证线程安全。但是这种方式会导致每次获取实例时都需要进行同步降低了性能。
public class Singleton {private static Singleton instance;private Singleton() {}public static synchronized Singleton getInstance() {if (instance null) {instance new Singleton();}return instance;}
} 2. 饿汉式
这种方式在类加载时就创建了对象实例因此在多线程环境下也能保证只有一个实例存在。但是在应用程序启动时就创建实例可能会造成资源浪费。
public class Singleton {private static Singleton instance new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}
}
3. 双重检查锁定
这种方式结合了懒汉式和饿汉式的优点既实现了延迟加载又保证了线程安全。通过使用volatile关键字和双重检查锁定机制可以在保证性能的同时确保只有一个实例存在。
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;}
}
4. 静态内部类
这种方式利用了类加载机制和类的初始化过程的线程安全性通过静态内部类来持有单例实例。在第一次使用时才会加载内部类并创建实例从而实现了延迟加载和线程安全。
public class Singleton {private Singleton() {}private static class SingletonHolder {private static final Singleton INSTANCE new Singleton();}public static Singleton getInstance() {return SingletonHolder.INSTANCE;}
}
5.枚举类
使用枚举类也可以实现单例模式这是一种简洁且线程安全的方式
在这种方式中 INSTANCE 是一个枚举常量它在类加载时被实例化且只会被实例化一次。因此通过 Singleton.INSTANCE 就可以获取到单例对象。
public enum Singleton {INSTANCE;// 可以添加其他的成员变量和方法public void doSomething() {// 单例对象的操作}
}