文档开发者中心
我的

【原创】Java学习总结之设计模式(二)单例模式

作者:HW-WT


摘要:1. 为什么要用单例模式? 单例模式保证了系统该内存中该类只有一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能 2. 单例模式的几种形式 1)饿汉式(一):静态变量 优点:写法简单,在类装载的时候就完成实例化,避免了线程同步问题 缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果,如果从始至终都没使用这个实例,会造成内存浪费 JAVA的源码Runtime使用的就是这种方式 pu

1. 为什么要用单例模式?

单例模式保证了系统该内存中该类只有一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能

2. 单例模式的几种形式

1)饿汉式(一):静态变量

优点:写法简单,在类装载的时候就完成实例化,避免了线程同步问题

缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果,如果从始至终都没使用这个实例,会造成内存浪费

JAVA的源码Runtime使用的就是这种方式


2)饿汉式(二):静态代码块

和静态变量实现基本一样,优缺点一致


3)懒汉式(一):

优点:起到了Lazy Loading,即使用到才会加载类对象,但是只能在单线程下使用

缺点:线程不安全(可能会new出多个实例)

4)懒汉式(二):解决线程同步问题(同步锁)

优点:解决了线程安全问题

缺点:每次都同步,效率低,实际开发中不推荐使用

5)双重检查:

可以解决线程安全和低效问题,推荐使用

6)静态内部类:

i. 采用类装载的机制来保证初始化实例只有一个线程,静态内部类在Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会装在SingletonInstance类,从而完成Singleton的实例化

ii. 类的静态属性只会在第一次加载类的时候初始化,所以在这里JVM帮助我们保证了线程的安全性,在类加载的时候,别的线程是无法进入的

iii. 优点:避免了线程不安全,进行静态内部类特点实现延迟加载,效率高,推荐使用

7)枚举:

可以解决线程安全和低效问题,Java作者推荐使用



点赞
收藏
回复
分享
举报
浏览1051 发布于2019-10-21 07:26未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。