单例模式---Java实现

2023-10-27

单例模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。

注意:

1、单例类只能有一个实例。
2、单例类必须自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。

优点:由于在一个系统,一个类经常被使用在不同的地方,通过单例模式,可以避免多次创建多个实例,从而节约系统资源。

懒汉模式:

//懒汉模式
public finall class Singleton{
    private static Singleton instance = null;
    private Singleton(){ };
    public static Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }

}
//加锁 解决线程同步问题
public finall class Singleton{
    private static Singleton instance = null;
    private Singleton(){ };
    public static synchorized Singleton getInstance(){
        if(instance == null){
            instance = new Singleton();
        }
        return instance;
    }

}
//双重校验锁  解决性能问题
public finall class Singleton{
    private static Singleton instance = null;
    private Singleton(){ };
    public static synchorized Singleton getInstance(){
    if(instance == null){
        synchorized(Singleton.class){
         if(instance == null){
            instance = new Singleton();
         }
        }
    }
        return instance;
    }
    
}

饿汉模式

//饿汉模式  以空间换时间  一开始就创建实例
public class Singleton2 {  
    
    private static Singleton2 instance = new Singleton;//自行创建实例 
    private Singleton2(){ }  //构造函数
    public static Singleton2 getInstance(){
     //通过该函数向整个系统提供实例   
        return instance;
    }
}

饿汉模式的优点是:
可以保证多线程情况下实例的唯一性,而且getInstance直接返回唯一实例,性能非常高。
缺点:在类成员变量比较多,或变量比较大的情况下,这种模式可能会在没有使用类对象的情况下,一直占用堆内存。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单例模式---Java实现 的相关文章

随机推荐

  • Springboot集成logback

    一 logback的介绍 Logback是由log4j创始人设计的另一个开源日志组件 官方网站 http logback qos ch 它当前分为下面下个模块 logback core 其它两个模块的基础模块 logback classic
  • 朱自清《春》加薪版

    为什么80 的码农都做不了架构师 gt gt gt 盼望着 盼望着 文件来了 加薪的脚步近了 一切都像刚睡醒的样子 欣欣然张开了眼 物价涨起来了 房价涨起来了 职工的工资也要涨了 大家都高兴的欢呼起来了 标准悄悄地从官员口里漏出来 嫩嫩 的
  • 虚拟化技术及实时虚拟化概述

    版权声明 本文为本文为博主原创文章 未经本人同意 禁止转载 如有问题 欢迎指正 博客地址 https www cnblogs com wsg1100 文章目录 一 前言 二 分时系统 三 虚拟化介绍 四 虚拟化实现方式及分类 模拟器 Typ
  • linux下载安装jdk

    1 从官网下载jdk 如下是jdk下载地址 直接点击即可 Java Downloads Oracle 下载自己需要的jdk即可 建议下载jdk8 2 将jdk传入linux服务器 2 1 首先在linux中创建文件夹并且进入 mkdir o
  • jdbc autoReconnect=true 参数设置导致 slow log 爆表。

    1 过程 同事按照文档上配置了下面的jdbc url jdbc mysql ip port db autoReconnect true useUnicode true characterEncoding utf 8 结果导致了 mysql
  • Ansible介绍

    1 安装ansible 1 下载并安装ansible 所有节点安装依赖 yum install python y 添加源 yum y install epel release 查看可安装的版本 yum list grep ansible 下
  • 3.3 Makefile的嵌套包含

    一 Makefile包含子Makefile的示例 下面是一个示例Makefile和sub mk的内容 为了让主Makefile调用子Makefile 并分别输出一句打印 首先 主Makefile的内容如下 PHONY all all MAK
  • 4.2.5 预测分析法与预测分析表的构造

    4 2 5 预测分析法与预测分析表的构造 预测分析法也称为 LL 1 分析法 这种分析法是确定的自上而下分析的另一种方法 采用这种方法进行语法分析要求描述语言的文法是 LL 1 文法 一个预测分析器由一张预测分析表 也称为 LL 1 分析表
  • AES,SHA1,DES,RSA,MD5区别

    AES 更快 兼容设备 安全级别高 SHA1 公钥后处理回传 DES 本地数据 安全级别低 RSA 非对称加密 有公钥和私钥 MD5 防篡改 相关 公开密钥加密 英语 public key cryptography 又译为公开密钥加密 也称
  • python魔法方法

    什么是魔术方法 在Python中 所有以双下划线 包起来的方法 统称为Magic Method 魔术方法 它是一种的特殊方法 普通方法需要调用 而魔术方法不需要调用就可以自动执行 魔术方法在类或对象的某些事件出发后会自动执行 让类具有神奇的
  • Spring Cloud 服务追踪、Spring Boot Admin

    服务链路追踪 概述 这篇文章主要讲解服务追踪组件 ZipKin ZipKin 简介 ZipKin 是一个开放源代码的分布式跟踪系统 由 Twitter 公司开源 它致力于收集服务的定时数据 以解决微服务架构中的延迟问题 包括数据的收集 存储
  • vue3内对vue-router4的基本使用

    1 安装 vue router 默认安装的就是 4版本 yarn add vue router npm i vue router 2 在根路径上新建文件夹 router并在里面 新建 index js 文件 编码 import create
  • 预测时间序列(第 1 部分):经验分解模式(EMD)方法

    概述 任何交易者的成功主要取决于他或她 透视未来 的能力 即推测一段时间周期后价格如何变化的能力 为了解决这个问题 重要的是要拥有各种类的工具和功能 从基准市场特征的最新更新 到技术分析算法 运用时间序列预测的数学方法 价格本身亦或技术指标
  • 在 JavaScript 中监听 DOM 节点的变化

    要在 JavaScript 中监听 DOM 节点的变化 您可以使用 MutationObserver API MutationObserver 提供了一种监视对 DOM 树所做更改的能力 并在每次更改发生时触发回调函数 以下是一个示例 演示
  • R语言(创建矩阵,矩阵的运算,数据包的使用,读取文件)

    数据包使用 data 显示R语言自带的数据包 datasets library datasets 加载datasets数据包 data package mtcars 加载完成后才可以调用 调用mtcars数据包 mtcars 查看mtcar
  • 分段函数 python

    目录 题目描述 AC代码 题目描述 题目描述 有一个函数 y x x lt 1 2x 1 1 lt x lt 10 3x 11 x gt 10 写一段程序 输入x 输出y 输入 一个数x 输出 一个数y AC代码 x int input y
  • Java8 list.stream()操作使用心得

    文章目录 准备数据 1 把list中某个字段用逗号相连 2 根据某个字段分组 3 取出list中某个字段最大值的记录 4 根据某个字段倒序 5 根据某个字段求和 6 根据某个字段过滤 7 全字段去重 准备数据 实体类 Data public
  • 接入谷歌AdSense后浏览器控制台报错:Failed to load resource: the server responded with a status of 403的原因及解决办法、

    本篇文章主要讲解 接入谷歌AdSense后浏览器控制台报错 Failed to load resource the server responded with a status of 403 ads 的原因及解决办法 日期 2023年6月1
  • 掌优电子刷脸支付未来可期

    据 重庆商报 报道 近日 由广州某科技公司自主研发的两款比邻星系列红外活体相机以及核心算法 正式通过金融行业的国家级权威性检测机构 银行卡检测中心 以下简称BCTC 的严格技术检测 成为目前全国唯一过检BCTC的红外双目相机 其活体检测性能
  • 单例模式---Java实现

    单例模式涉及到一个单一的类 该类负责创建自己的对象 同时确保只有单个对象被创建 这个类提供了一种访问其唯一的对象的方式 可以直接访问 不需要实例化该类的对象 注意 1 单例类只能有一个实例 2 单例类必须自己创建自己的唯一实例 3 单例类必