单例模式有哪些具体的三种实现方法?

更新于
2026-10-12 08:19:07
1阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计356个文字,预计阅读时间需要2分钟。

单例模式有哪些具体的三种实现方法?

懒汉式单例模式+//懒汉式单例类在第一次调用时实例化自己+public class Singleton{+private Singleton(){}+private static Singleton single=null;+//静态工厂方法+public static Singleton getInstance(){+if (single==null){+single=new Singleton();+}}+}

单例模式有哪些具体的三种实现方法?

懒汉式单例模式

//懒汉式单例类.在第一次调用的时候实例化自己 public class Singleton { private Singleton() {} private static Singleton single=null; //静态工厂方法 public static Singleton getInstance() { if (single == null) { single = new Singleton(); } return single; } } 但是以上懒汉式单例的实现没有考虑线程安全问题,它是线程不安全的,并发环境下很可能出现多个Singleton实例,要实现线程安全,有以下三种方式 1、在getInstance上加锁 public static synchronized Singleton getInstance() { if (single == null) { single = new Singleton(); } return single; } 2、双重锁检查锁定 public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } 3、静态内部类(个人倾向于这一种,既保证了线程安全,又保证了线程同步) public class Singleton { private static class LazyHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return LazyHolder.INSTANCE; } } 饿汉单例模式

//饿汉式单例类.在类初始化时,已经自行实例化 public class Singleton1 { private Singleton1() {} private static final Singleton1 single = new Singleton1(); //静态工厂方法 public static Singleton1 getInstance() { return single; } } 已经创建好一个静态的对象供使用,天生的线程是安全的,但性能比较低

本文共计356个文字,预计阅读时间需要2分钟。

单例模式有哪些具体的三种实现方法?

懒汉式单例模式+//懒汉式单例类在第一次调用时实例化自己+public class Singleton{+private Singleton(){}+private static Singleton single=null;+//静态工厂方法+public static Singleton getInstance(){+if (single==null){+single=new Singleton();+}}+}

单例模式有哪些具体的三种实现方法?

懒汉式单例模式

//懒汉式单例类.在第一次调用的时候实例化自己 public class Singleton { private Singleton() {} private static Singleton single=null; //静态工厂方法 public static Singleton getInstance() { if (single == null) { single = new Singleton(); } return single; } } 但是以上懒汉式单例的实现没有考虑线程安全问题,它是线程不安全的,并发环境下很可能出现多个Singleton实例,要实现线程安全,有以下三种方式 1、在getInstance上加锁 public static synchronized Singleton getInstance() { if (single == null) { single = new Singleton(); } return single; } 2、双重锁检查锁定 public static Singleton getInstance() { if (singleton == null) { synchronized (Singleton.class) { if (singleton == null) { singleton = new Singleton(); } } } return singleton; } 3、静态内部类(个人倾向于这一种,既保证了线程安全,又保证了线程同步) public class Singleton { private static class LazyHolder { private static final Singleton INSTANCE = new Singleton(); } private Singleton (){} public static final Singleton getInstance() { return LazyHolder.INSTANCE; } } 饿汉单例模式

//饿汉式单例类.在类初始化时,已经自行实例化 public class Singleton1 { private Singleton1() {} private static final Singleton1 single = new Singleton1(); //静态工厂方法 public static Singleton1 getInstance() { return single; } } 已经创建好一个静态的对象供使用,天生的线程是安全的,但性能比较低