当前位置: 首页 > news >正文

创建单例模式的六种方式

一、单例模式

  1. 单例模式是一种创建型的设计模式,构造函数是私有的,因此只能在类中创建一个实例,且对外提供一个静态公有方法获取这个实例。

二、创建方法

1. 懒汉式(线程不安全)

public class Singleton{private static Singleton instance;private Singleton(){}public static Singleton getInstance(){if(instance==null){ //多线程时,此处会产生线程安全问题instance = new Singleton();}return instance;}
}

2. 懒汉式(线程安全)

public class Singleton{private static Singleton instance;private Singleton(){}public synchronized static Singleton getInstance(){if(instance==null){instance=new Singleton();}return instance;}

3. 双重检查锁(DCL,Double-Checked Locking)(线程安全)

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 final static Singleton instance=new Singleton();private Singleton(){}public static Singleton getInstance(){return instance;}

5. 静态内部类(线程安全)

public class Singleton{private Singleton(){}private static class InnerClass{private final static Singleton INSTANCE=new Singleton();} public static Singleton getInstance(){return InnerClass.INSTANCE;}
}

6. 枚举类(线程安全)

public enum Singleton{INSTANCE;public void doSomething(String str){System.out.println(str);}
}
http://www.lryc.cn/news/382126.html

相关文章:

  • 实用软件下载:CrossOver 2024最新安装包及详细安装教程
  • 开启调试模式
  • pygame 绘制一个大黑脸
  • XMLXXE实体注入
  • 艺术家电gorenje x 设计上海丨用设计诠释“生活的艺术”
  • 【刷题篇】链表
  • 若依框架,小程序访问后端,后端访问客户端,客户端读取图片返回
  • os7安装gitlab
  • 木头姐:将出于经济方面的考虑支持特朗普
  • sql注入登陆绕过
  • QT利用QGraphicsDropShadowEffect效果及自定义按钮来实现一个炫酷键盘
  • 机器学习(一)
  • 【深度学习】python之人工智能应用篇——图像生成技术(一)
  • java 非srping 使用r2dbc操作mysql 增删改查代码
  • 假冒国企现形记:股权变更视角下的甄别分析
  • Django 使用Apscheduler执行定时任务
  • Shopee API接口:获取搜索栏生成的商品结果列表
  • 选择门店收银系统要考虑哪些方面?美业系统Java源码分享私
  • 智慧养老的养老方式及其技术实现与趋势
  • 思维导图之计算机网络整体框架
  • P7771 【模板】欧拉路径
  • 卷积神经网络(CNN)理解
  • Databend 开源周报第 149 期
  • Hue Hadoop 图形化用户界面 BYD
  • 【经验分享】RT600 serial boot mode测试
  • 七种不同类型测宽仪技术参数 看看哪种能用于您的产线?
  • 【GO】rotatelogs库和sirupsen/logrus库实现日志功能的实践用例
  • Arc2Face - 一张图生成逼真的多风格人脸,本地一键整合包下载
  • swiper 幻灯片
  • Ubuntu 使用Vscode的一些技巧 ROS