小工具知识网

当前位置: 首页 > 行业知识 > 单例模式:饿汉式、懒汉式;线程安全的单例模式创建的6种方式

行业知识

单例模式:饿汉式、懒汉式;线程安全的单例模式创建的6种方式

2026-10-29 13:38:00 来源:互联网转载

单例模式

单�index.php/tags-41973.html" >��模式Singleton是一种创建型模式,指某个采用Singleton单例模式,则这个类在同一个

()

JVM上,只能产生一个实例供外部访问,并且仅提供一个全局的访问方式。

懒汉式

懒汉式线程不安全

()
public class Singleton1 {private static Singleton1 instance;// 构造方法私有化!!!private Singleton1() {};public static Singleton1 getInstance() {if(instance == null) {instance = new Singleton1();}return instance;}}

饿汉式

饿汉式线程安全

public class Singleton2 {private static final Singleton2 instance = new Singleton2();// 构造方法私有化private Singleton2() {};public static Singleton2 getInstance() {return instance;}}

线程安全的单例模式

  1. 饿汉式线程安全
  2. 全局锁线程安全
  3. 静态代码块创建单例对象线程安全
  4. 双重校验锁实现线程安全
  5. 静态内部类实现线程安全的单例模式
  6. 内部枚举类实现线程安全
  • 全局锁

    public class Singleton3 {private static Singleton3 instance;// 构造方法私有化private Singleton3() {};// 通过synchronized添加全局锁实现线程安全public static synchronized Singleton3 getInstance() {if (instance == null) {instance = new Singleton3();}return instance;}}
  • 静态代码块

    public class Singleton4 {private static final Singleton4 instance;// 静态代码块创建单例对象static {instance = new Singleton4();}// 构造方法私有化private Singleton4(){}  public static Singleton4 getInstance() {return instance;}}
  • 双重校验锁

    public class Singleton5 {private static Singleton5 instance;private Singleton5() {}public static Singleton5 getInstance() {if (instance == null) {synchronized (Singleton5.class) {if (instance == null) {instance = new Singleton5();}}}return instance;}}
  • 静态内部类

    public class Singleton6 {// 构造方法私有化private Singleton6() {};// 静态内部类private static class SingletonHolder{// 创建单例对象private static Singleton6 instance = new Singleton6();}public static Singleton6 getInstance() {return Singleton6.SingletonHolder.instance;}}
  • 静态枚举类

    public class Singleton7 {private Singleton7() {}// 内部枚举类enum SingletonEnum{INSTANCE;// 单例对象private Singleton7 instance;    private SingletonEnum() {instance = new Singleton7();}    private static Singleton7 getInstance() {return SingletonEnum.INSTANCE.instance;}}}

上一篇:服务器怎么生成多ip?

下一篇:轻松掌握!苹果Mini游戏下载攻略大揭秘!