Java设计模式之单例模式简析
什么是单例模式?
单例模式是常用的设计模式,在我们的系统乃至在框架中都普遍被用到,单例模式就是使一个类有且只有一个实例用于外部访问,这样大大的节省了系统的资源,而单例模式需要注意的也就以下三点:
- 保证这个类有且只有一个实例
- 自行创建这个实例
- 提供这个实例供外部访问
代码实现需要注意的就是
- 单例模式的类构造方法私有化
- 这个类的定义中包含自己的一个静态实例对象
- 提供一个共有静态方法供外部调用
三种实现方式
1、懒汉式
懒汉式与延迟初始化有些相似,就是没人用的时候我不实例化出来,有人需要调用了我再实例化出来,JAVA代码实现如下
public class SingletonClz{ //实例 private static SingletonClz instance = null; //私有构造 private SingletonClz(){} //外部调用方法 public static getInstance() { if(null == instance) { instance = new SingletonClz(); return instance; } else { return instance; } } }
2、饿汉式
先实例化出来,有人用就直接返回即可
public class SingletonClz{ //实例 private final static SingletonClz INSTANCE = new SingletonClz(); //私有构造 private SingletonClz(){} //外部调用方法 public static getInstance() { return instance; } }
3、加锁的单例模式
public class SingletonClz{ //实例 private static SingletonClz instance = null; //私有构造 private SingletonClz(){} //外部调用方法 public static getInstance() { synchronized(SingletonClz.class) { if(null == instance) { instance = new SingletonClz(); } } return instance; } }
这里加一个重量级的锁是为了防止并发的情况下两个线程同时访问这个方法同时发现instace为null,就都跑去实例化这个对象了。
加了一个synchronized锁就防止了这一情况的发生,当有一个线程拿到了锁,另一个就阻塞在外面知道锁的释放,当线程A实例化完成并释放锁后,B进来发现instace不等于空了,就不会再去实例化了。
到此这篇关于Java设计模式之单例模式简析的文章就介绍到这了,更多相关Java单例模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java class文件格式之属性详解_动力节点java学院整理
这篇文章主要介绍了Java class文件格式之属性详解,需要的朋友可以参考下2017-06-06SpringBoot项目启动时增加自定义Banner的简单方法
最近看到springboot可以自定义启动时的banner,然后自己试了一下,下面这篇文章主要给大家介绍了SpringBoot项目启动时增加自定义Banner的简单方法,需要的朋友可以参考下2022-01-01一篇文章带你了解jdk1.8新特性--为什么使用lambda表达式
Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码,本篇文章就带你了解,希望能给你带来帮助2021-08-08
最新评论