当前位置:网站首页 > 技术博客 > 正文

单例模式简单例子



文章目录

单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例)。就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。

就是类在内存中只能存在一个实例对象

所谓饿汉式,就是直接创建出类的实例化,然后用private私有化,对外只用静态方法暴露。

步骤

将类的实例化放到静态代码块中的写法,基本同上。

测试代码(后面都可使用这个测试代码,不在赘述运行截图,可以自己试试):

所谓懒汉式,就是在需要调用的时候再创建类的实例化。

起到了懒加载效果,但是只能在单线程使用,多线程会不安全,因为当多个线程并发同时判断instance为空时,就会相应的实例化多个对象。

插播反爬信息 )博主CSDN地址:

上面线程不安全,那上锁不就好了,使用synchronized关键字。 这样虽然解决了线程安全,但其实实例化操作只做一次,而获取实例(即getInstance)的操作是很多次的,把调用的方法加上同步,会大大降低效率。

上面代码效率低,那在同步前判断一下有没有实例化不就好了,若没有实例化则用同步方法new一个,否则直接return即可。即所谓的双重检查。 需要用到关键字volatile,防止指令重排。如果不用volatile关键字,就会和线程不安全情形一样,在if判断那会有并发。

这样既实现了懒加载,又保证了线程安全。

静态内部类在外部类装载时不会实例化,当调用的时候才会装载并实例化,且JVM保证了其装载时的线程安全性。也能保证懒加载和线程安全,有点像自带版的双重检查。

其实,使用枚举也能实现单例模式,不仅能避免多线程同步问题,也能防止反序列化重新创建新的对象。

对应测试:

单例模式使用的场景:

版权声明


相关文章:

  • 面向对象六大设计原则2025-03-28 22:01:03
  • maven.2025-03-28 22:01:03
  • windows修改文件权限2025-03-28 22:01:03
  • 三态门的工作原理和特点2025-03-28 22:01:03
  • 面向对象设计的7大原则2025-03-28 22:01:03
  • python des解密2025-03-28 22:01:03
  • 线程池 c++112025-03-28 22:01:03
  • opengl视图变换2025-03-28 22:01:03
  • python3.8安装pyqt52025-03-28 22:01:03
  • 0-1背包问题动态规划算法2025-03-28 22:01:03