关于java单例模式的文章早已是非常多了,本文是对我个人过往学习java,理解及应用java单例模式的一个总结。此文内容涉及java单例模式的基本概念,以及什单例模式的优缺点,希望对大家有所帮助。

什么是java单例模式?

单例模式是保证类的实例是单例的一种常见设计模式。

单例模式的优点:

(1)首先肯定是节省内存资源,不管多频繁的通过暴露的方法创建实例,都能保证创建的对象在系统内存中是同一实例对象;

(2)灵活性,由于所有实例的创建都由该类控制,所有该类可以灵活的更改实例化过程;

(3)实例的受控访问,单例类可以轻松的控制唯一实例的受控访问;

单例模式的缺点:

(1)单例模式没有接口,不容易扩展;

(2)使用时不能用反射模式创建单例,否则会实例化一个新的对象;

(3)使用懒单例模式时注意线程安全问题;

实现单例模式的方式:

饿单例方式

饿单例在类加载的时候就被提前new了出来,一开始就实例化了一个supermanInstance对象,不管你程序需要不要调用这个对象,它都已经准备好了;没有进行延迟加载,为了减小程序负载大多数情况下需要懒加载,所以这种实现单例的方式不是最佳选择。

懒单例方式(单线程写法)

声明一个对象不去实例化它,当程序需要实例化的时候调用静态工厂方法 getSupermanInstance(),方法中对声明的对象进行判断,如果是null的话再去实例化它,这种写法可以达到延迟加载的效果,但它是非线程安全的,若在多线程中有两个线程同时调用静态工厂方法getSupermanInstance() 就有可能重复的创建该类的实例破坏了单例的唯一性。

我整理了一些java技术资料和面试题集,供大家提升进阶,不管你是有面试跳槽打算还是单纯精进自己,都可以免费领取一份。

先展示部分截图,文末附免费下载方式

一、JVM篇(2022)

(含:JVM类加载机制,JVM内存模型,垃圾收集机制,类字节码实现机制,JVM调优案例,GC日志详解等)

二、Java并发编程(2022)

(含:java内存模型,并发集合,线程池,阻塞队列,CAS与原子操作,无锁并发框架Disruptor等)

三、Spring篇(2022)

(含:spring IOC,spring AOP原理,spring 5,springMVC,事务管理,循环依赖,spring设计模式等)

四、Mysql篇(2022)

(含:SQL执行原理,索引底层机制,SQL执行计划分析,Mysql锁机制,Mysql事务隔离,SQL优化实践等)

五、SpringCloud篇(2022)

(含:服务发现与注册Eureka与Nacos,服务限流熔断降级Hystrix与Sentinel,分布式事务Seata,网关Gateway等)

六、Dubbo篇(2022)

(含:Dubbo基础,架构设计,集群,配置,通信协议,SPI等)

七、Redis篇(2022)

(含:Redis核心数据结构,Redis持久化机制与安全机制,哨兵与集群架构,Redis缓存穿透,缓存失效,缓存雪崩,Redis缓存设计与性能优化等)

八、分布式篇(2022)

(含:分布式架构原理,集群架构原理,分布式锁,分布式事务,分布式协议,分布式配置,海量数据分库分表,分布式调度,等)

九、设计模式篇(2022)

(含:单例模式,工厂模式,抽象工厂模式,建造者模式,原型模式,适配器模式,装饰器模式,代理模式等23种设计模式)

十、数据结构与算法篇(2022)

(含:红黑树,B+树,贪心算法,哈希分治法,七大查找算法,动态规划,一致性算法等)

十一、MQ篇(2022)

(含:消息丢失,消息重复消费,消息乱序,消息积压,延时队列,消息回溯消费,消息刷盘机制,MQ中间件集群架构原理等)

十二、Netty篇(2022)

(含:BIO、NIO及AIO线程模型,Netty线程模型,序列化协议protobuf,粘包拆包问题,Netty心跳机制,直接内存与Netty零拷贝,WebSocket协议等)

十三、Zookeeper篇(2022)

(含:ZooKeeper选举机制,ZooKeeper数据模型,ZooKeeper应用场景等)

十四、ElasticSearch篇(2022)

(含:ElasticSearch数据模型、ElasticSearch分布式架构、ElasticSearch数据读写原理和段合并等)

十五、网络与操作系统篇(2022)

(含:网络协议,TCP/IP系统结构,TCP/IP协议族,常见面试题,等)

由于篇幅有限,这里只展示部分内容,所有的资料大家点击下方名片即可免费领取。

什么是java单例模式?相关推荐

  1. Java单例模式个人总结(实例变量和类变量)

    Java单例模式 背景知识:Static关键字. 在对于定义类的变量,分为两种,是否具有static修饰的变量: 没有static修饰的变量,通过类的实例化(对象)引用,改变量称为实例变量: 使用st ...

  2. Java 单例模式探讨

    以下是我再次研究单例(Java 单例模式缺点)时在网上收集的资料,相信你们看完就对单例完全掌握了 Java单例模式应该是看起来以及用起来简单的一种设计模式,但是就实现方式以及原理来说,也并不浅显哦. ...

  3. Java单例模式优化写法

    转载自 http://blog.csdn.net/diweikang/article/details/51354982 Java单例模式优化写法 方法一:推荐 [java] view plain co ...

  4. Java单例模式的几种实现方式

    Java单例模式的几种实现方式 在Java 中,单例类只能有一个实例,必须创建自己的唯一实例,单例类必须给所有其他对象提供这一实例.Java 单例模式有很多种实现方式,在这里给大家介绍单例模式其中的几 ...

  5. Java 单例模式:懒加载(延迟加载)和即时加载

    Java 单例模式:懒加载(延迟加载)和即时加载 引言 在开发中,如果某个实例的创建需要消耗很多系统资源,那么我们通常会使用惰性加载机制(或懒加载.延时加载),也就是说只有当使用到这个实例的时候才会创 ...

  6. Java单例模式:为什么我强烈推荐你用枚举来实现单例模式

    写在前面--原作的这篇文章真的写的非常的简洁,逻辑清晰,将Java单例模式的各种写法写的非常清楚,并介绍了用枚举实现单例的最佳实践. 单例模式简介 单例模式是 Java 中最简单,也是最基础,最常用的 ...

  7. java单例模式 三种_三种java单例模式概述

    在java语言的应用程序中,一个类Class只有一个实例存在,这是由java单例模式实现的.Java单例模式是一种常用的软件设计模式,java单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种.下 ...

  8. 比心app源码,Java 单例模式

    比心app源码,Java 单例模式实现的相关代码 概述:单例模式是指在内存中永远只有一个类的实例. 有利于节约内存和保证共享计算的结果正确,方便管理. 单例模式的形式 饿汉式单例:在获取单例对象之前对 ...

  9. Java单例模式及开发应用场景

    一.Java单例模式是什么? 所谓单例,指的就是单实例,有且仅有一个类实例,这个单例不应该由人来控制,而应该由代码来限制,强制单例. 二.为什么要用单例模式? 单例有其独有的使用场景,一般是对于那些业 ...

最新文章

  1. R语言常用sys函数汇总:sys.chmod、Sys.Date、Sys.time、Sys.getenv、Sys.getlocale、sys.getpid、sys.glob、sys.info等
  2. php elasticsearch ik,elasticsearch和analysis-ik的安装使用
  3. Maven搭建JavaFX项目
  4. 如果有这样一台服务器……
  5. 李子柒被坑,大厂生气了!字节跳动火速对杭州微念启动撤资
  6. python writerow参数_csv文件的输出结果TypeError writerow()接受2个位置参数,但给出了5个...
  7. struct类型重定义 不同的基类型_C++学习大纲:联合类型
  8. Python里的++和--不是运算符
  9. Python实现随机生成10以内的加法
  10. Spring Data Jpa 审计功能
  11. python3安装步骤-超详细的小白python3.X安装教程|Python安装
  12. CMake 简单入门
  13. Vue中将十六进制颜色格式转换为RGB格式
  14. MAC安装unrar
  15. Cygwin系列(一):Cygwin是什么
  16. 【ESD专题】2.ESD防护及保护器件(电介质和压敏电阻)
  17. python可视化界面
  18. 心形符号c语言程序,c语言心形代码及图形
  19. 给图片加上水印php视频,如何使用PHP给图片加水印
  20. 输出101到200的素数python_使用python判断101-200之间有多少个素数,并输出所有素数分别是哪些a?...

热门文章

  1. python sed awk_观点|awk sed ,一个老派系统管理员的基本素养
  2. 基因相关性——字符串入门
  3. Lasso回归理论及代码实现
  4. windows下如何查看端口列表以及如何开放指定端口
  5. 超级任天堂模拟器 bsnes 开发者自杀(文末附模拟器及ROM)
  6. 关于new Map()
  7. 在Ubuntu上基于wayland/weston源码构建weston桌面
  8. 【activiti】activiti入门
  9. strace命令解析
  10. MySQL (4) 第一范式 第二范式 第三范式 BC范式