当前位置:网站首页>单例模式
单例模式
2022-08-09 06:22:00 【考拉盖饭】
单例模式
单例模式分饿汉式和懒汉式
饿汉式:
在类加载时就完成了初始化,所以类加载比较慢,不过这个慢也是看实例对象的大小,一般的单例都不会存放大容量的内容,所以大部分在毫秒级别,但获取对象的速度快。
public class Hungry {
private Hungry(){
// 私有化构造器
}
private static Hungry HUNGRY = new Hungry(); // 饿汉式
// 对外提供获取对象的方法
public static Hungry getInstance() {
return HUNGRY;
}
}
懒汉式:
在类加载时不初始化,等到第一次被使用时才初始化,所以会有并发的可能存在。
1.双重检查懒汉式
public class Lazy {
private Lazy(){
// 私有化构造器
}
private volatile static Lazy lazy;
// 双重检查懒汉式,当然,这种方式可以被反射破坏,不过正常使用这一种就可以
public static Lazy getInstance() {
if (lazy==null){
synchronized (Lazy.class){
if(lazy==null){
lazy = new Lazy();
}
}
}
return lazy;
}
public static void main(String[] args) throws IllegalAccessException, InvocationTargetException, InstantiationException, NoSuchMethodException {
Lazy instance = Lazy.getInstance();
Constructor<Lazy> declaredConstructor = Lazy.class.getDeclaredConstructor(new Class[]{
});
declaredConstructor.setAccessible(true);
Lazy lazy = declaredConstructor.newInstance();
System.out.println(instance);
System.out.println(lazy);
/*for (int i = 1; i <= 10; i++) { new Thread(()->{ Lazy.getInstance(); },String.valueOf(i)).start(); }*/
}
}
2.枚举懒汉式
// 因为枚举本身自动支持序列化机制,绝对防止多次实例化
public enum EnumSingle {
SINGLE;
public static EnumSingle getInstance(){
return SINGLE;
}
}
// 试图通过反射来破坏枚举的单例也是不成功的
class Test{
public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
EnumSingle instance = EnumSingle.getInstance();
Constructor<EnumSingle> declaredConstructor = EnumSingle.class.getDeclaredConstructor(String.class,int.class);
declaredConstructor.setAccessible(true);
EnumSingle enumSingle = declaredConstructor.newInstance();
System.out.println(instance);
System.out.println(enumSingle);
}
}
边栏推荐
- phpstudy 安装 flarum论坛
- 带头双向循环链表的增删查改(C语言实现)
- Molybdenum disulfide/hafnium dioxide composite nanomaterials (MoS2/HfO2) | tantalum-doped hafnium dioxide nanoparticles (Qi Yue bio)
- 直播平台怎么搭建,设置状态栏颜色、沉浸式状态栏
- harbor企业级镜像仓库搭建
- 一文搞懂│XSS攻击、SQL注入、CSRF攻击、DDOS攻击、DNS劫持
- Adds, deletes, searches, and changes the leading doubly circular linked list (implemented in C language)
- 【JMeter】jmeter测试 - 上传多个图片/批量上传图片接口 CSV文件参数化方法
- AIOT介绍
- sql问题解答创建表的语句
猜你喜欢
一道很简答但是没答对的SQL题
深度学习-神经网络原理2
sql problem solving statement to create a table
中英文说明书丨CalBioreagents 山羊抗人白蛋白,IgG组分
sqlserver导入数据类型问题
SiO2 / KH550 modified ferroferric oxide nano magnetic particles | PDA package the ferromagnetic oxide nanoparticles (research)
Redis 2 - 高级
MYSQL Advanced Chapter - Query Interception Analysis, Lock Mechanism, Master-Slave Replication
05 多线程与高并发 - ThreadPoolExecutor 源码解析
具有CT造影功能的硫化铋纳米棒|硫化铋-锌原卟啉复合材料(PAMAM/Bi2S3复合纳米粒子)
随机推荐
普罗米修斯原理及节点发布
Unity Gobang Game Design and Simple AI(3)
直接用的zip包 缺少很多依赖,pip没有,感觉用anaconda create一个环境会方便点
关于如何查找NXP S32K1xx系列单片机的封装信息和引脚定义
kubernetes security
锁执行的过程
[R language] interaction test data
四氧化三铁/硫化铋纳米复合材料([email protected]@BSABiS纳米颗粒)|树状大分子稳定的硫化铋纳米颗粒|科研试剂
著名数字藏品专家、数藏大会创始人高泽龙接受中国企业家杂志采访
工控设备的系统如何进行加固
How to find package information and pin definitions for NXP S32K1xx series microcontrollers
【Wwise】ArgumentException: The specified path is not of a legal form (empty).关于WwiseGlobal中的路径读取错误问题
CalBioreagents超全Id 蛋白兔单克隆抗体,助力科研
The 24th day of the special assault version of the sword offer
Getting started with kubernetes apparmor
【R语言】把文件夹下的所有文件提取到特定文件夹
sqlserver导入数据类型问题
Invalid argument(s) appears when redis runs lua script
[R language] Extract all files under a folder to a specific folder
直播电商平台开发,点击查看更多显示所有内容