单例模式之饿汉式单例模式
单例模式之饿汉式单例模式
单例模式三要素:
1、私有的静态属性,这主要是为了存储类唯一的实例
2、公共的静态方法,这主要是为了提供给外键生成获取单例的方法
3、用于限制类再次实例话的措施。一般会私有化类的构造方法。
饿汉式单例模式
在类加载过程中就直接创建单例。代码如下:
public class HungrySingleton {private HungrySingleton() {}private static final HungrySingleton hungrySingleton=new HungrySingleton();public static HungrySingleton getInstance(){return hungrySingleton;}
}
饿汉式单例模式的优缺点:
优点:
1、不需要加锁就能保证线程安全
2、类加载时就创建好了,这样程序执行效率高。性能高
缺点:
1、正是因为类加载时就已经创建好了,无论是否使用都已经创建好了,所以会浪费一定的内存。如果一个程序有大量的饿汉式单例模式,那么在类加载时,会同时创建大量单例,会浪费硬件资源。
2、可以通过反射,创建不同的实例对象。
以下是通过反射破坏单例模式的例子:
public class HungrySingletonTest {public static void main(String[] args) {/* Thread t1=new Thread(new SingletonThread());Thread t2=new Thread(new SingletonThread());*//* t1.start();t2.start();*///通过反射破坏单例模式try {Class<?> clazz = HungrySingleton.class;Constructor c = clazz.getDeclaredConstructor(null);c.setAccessible(true);Object instance1 = c.newInstance();Object instance2 = c.newInstance();System.out.println(instance1);System.out.println(instance2);} catch (Exception e) {e.printStackTrace();}}
}
结果如下:
com.example.singleton.hungry.HungrySingleton@2f2c9b19
com.example.singleton.hungry.HungrySingleton@31befd9f
单例模式之饿汉式单例模式相关推荐
- Spring框架学习day_01: 框架配置方式/ 管理对象的作用域/ 生命周期/ 组件扫描/ 单例模式:“懒汉式“,“饿汉式“
1. Spring框架的作用 Spring框架的主要作用是创建对象和管理对象. 创建对象:类似于User user = new User(); 管理对象:随时可以通过Spring框架获取对象,甚至Sp ...
- 单例模式可以分为懒汉式和饿汉式: 懒汉式单例模式:在类加载时不初始化。 饿汉式单例模式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快。
单例模式可以分为懒汉式和饿汉式: 懒汉式单例模式:在类加载时不初始化. 饿汉式单例模式:在类加载时就完成了初始化,所以类加载比较慢,但获取对象的速度快.
- ESP-IDF:懒汉式和饿汉式单例模式测试代码
ESP-IDF:懒汉式和饿汉式单例模式测试代码 /单例模式测试/ /懒汉式/ class singleton_lazy { private: singleton_lazy(){}; public: s ...
- 饿汉式单例模式与懒汉式单例模式
饿汉式单例模式 GiantDragon 应该只有一只,通过私有化其构造方法,使得外部无法通过new 得到新的实例. GiantDragon 提供了一个public static的getInstance ...
- 单例模式:饿汉式vs懒汉式
单例模式是指,在代码运行时,保证某一个类只能被创建一个对象,不可以被创建第二次对象. 饿汉式: 1.先将类中的构造器私有化,用private修饰,防止在外界创建对象 例: private Test() ...
- 设计模式之单例模式(饿汉式,懒汉式)
饿汉式单例模式 public class Singleton1{/**一开始就创建了一个实例**/private static Singleton1 instance = new Singleton1 ...
- 单例模式(饿汉式和懒汉式)
以前学习单例的时候,只理解了简单部分.这次看DRP,对单例的饿汉式和懒汉式有了一些认识和对比. 在实际的开发中,有些地方需要一个类只有一个实例.比如:网站在线人数的计数器,再比如IDE中的工具箱之类的 ...
- java单例模式(饿汉式和懒汉式的几种不同写法)
1.饿汉式(直接创建)三种创建方法代码里面都有 第三种静态代码块方式,需要创建个properties文件 package java2;import java.io.IOException; impor ...
- Java实现单例模式之饿汉式、懒汉式、枚举式,带测试。
Java实现单例的3种普遍的模式,饿汉式.懒汉式.枚举式. 具体代码如下: package com.lcx.mode;/*** * 饿汉式单例,不管以后用不用这个对象,我们一开始就创建这个对象的实例, ...
最新文章
- iOS学习笔记(十三)——获取手机信息(UIDevice、NSBundle、NSLocale)
- 笔记-信息系统安全管理-网络安全工具
- html表单中get与post之间的区别
- python standardscaler_定制便携python工具箱
- React Hooks 实现和由来以及解决的问题
- Atitit 知识图谱管理 谱存储选型 与查询 目录 1. 知识图谱存储系统的选型。	1 1.1. 图数据库 neo4j 适合大规模数据	1 1.2. 关系数据库 小规模	2 2. 知识图谱查询语言
- Flutter 扩展NestedScrollView (二)列表滚动同步解决
- 达梦数据库DM8企业版--命令行方式的安装、创建数据库和注册服务
- 如何一个月左右拿下PAT甲级(浙大机试)满分
- 2022年日历表电子版打印版
- 生活小技巧:自己动手修理希捷 Expansion 移动硬盘
- 【Python学习】sklearn层次聚类
- 计算机教育课题申请报告,课题结项申请报告
- 【趣题】几堆石子轮流捡,谁捡到最后的石子算输的游戏
- 硬件测试的思考和改进:有道词典笔的高效测试探索
- 如何写出自媒体10W+爆文?
- 维特根斯坦思想概述南京大学陈亚军
- Android 编译 Jack简介
- springBoot整合SqlSessionTemplate使用
- 通达信股票的量化分析模型的公式