title: 单例模式 date: 2024-05-12 15:11:36 tags: [其它] categories: [其它] comments: true
单例模式
个人博客:dykang.top
单例模式有饿汉式单例模式、懒汉式单例模式和双检锁单例模式三种。
单例模式的好处
单例模式确保一个类只有一个实例对象,并提供了一个全局访问点来访问这个实例
这对于需要控制资源使用或需要共享资源的情况非常有用,比如数据库连接池,通过单例模式,可以避免对资源的重复创建和销毁,从而提高资源利用率和系统性能。
饿汉式:线程安全,一开始就初始化。
public class Singleton { //单例模式。保证一个类只有全局示例唯一 避免了创建对象的开销 。提供一个供外面获取对象的方法 //饿汗式 线程安全 private static Singleton singleton = new Singleton(); //private不让外界创建 private Singleton() {} //public为外界访问 public Singleton getSingleton() { return singleton; } }
懒汉式:非线程安全,延迟初始化。
public class Singleton { //单例模式。保证一个类只有全局示例唯一 避免了创建对象的开销 。提供一个供外面获取对象的方法 //懒汉式 线程不安全 private static Singleton singleton; //private不让外界创建 private Singleton() {} //public为外界访问 public Singleton getSingleton() { if(singleton==null) { singleton = new Singleton(); } return singleton; } }
双重检验锁机制:线程安全,延迟初始化。
public class Singleton { //单例模式。保证一个类只有全局示例唯一 避免了创建对象的开销 。提供一个供外面获取对象的方法 //双重检验锁 private volatile static Singleton singleton; //private不让外界创建 private Singleton() {} //public为外界访问 public Singleton getSingleton() { if(singleton==null) { //获取锁去创建对象 synchronized (Singleton.class){ //避免获取锁之后其它线程已经创建了对象 if(singleton == null) { singleton = new Singleton(); } } } return singleton; } }