| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 单例模式(两种) -> 正文阅读 |
|
[Java知识库]单例模式(两种) |
目录 一,概念
? 二,应用实例在jdbc操作时,使用了DataSource(数据库连接池) 三,饿汉模式
四,懒汉模式(单线程)
五,懒汉模式(多线程且效率低)
六,懒汉模式(双重校验锁)
关于volatile锁的作用:防止指令重排序 创建一个对象,在JVM中会经过三步: (1)为instance分配内存空间 (2)初始化instance对象 (3)将instance指向分配好的内存空间 指令重排序是指:
七,破坏单例模式无论是完美的懒汉式还是饿汉式,终究敌不过反射和序列化,它们俩都可以把单例对象破坏掉(产生多个对象)。 1:利用反射破坏单例模式(利用反射,强制访问类的私有构造器,去创建另一个对象????????)
2:利用序列化与反序列化破坏单例模式
在 JDK1.5 后,使用 Java 语言实现单例模式的方式又多了一种:枚举
优势1:代码对比饿汉式与懒汉式来说,更加地简洁 优势2:它不需要做任何额外的操作去保证对象单一性与线程安全性 优势3:使用枚举可以防止调用者使用反射、序列化与反序列化机制强制生成多个单例对象,破坏单例模式 八,总结(1)单例模式常见的写法有两种:懒汉式、饿汉式 (2)懒汉式:在需要用到对象时才实例化对象,正确的实现方式是:双重校验锁,解决了并发安全和性能低下问题 (3)饿汉式:在类加载时已经创建好该单例对象,在获取单例对象时直接返回对象即可,不会存在并发安全和性能问题。 (4)在开发中如果对内存要求非常高,那么使用懒汉式写法,可以在特定时候才创建该对象; (5)如果对内存要求不高使用饿汉式写法,因为简单不易出错,且没有任何并发安全和性能问题 (6)为了防止多线程环境下,因为指令重排序导致变量报异常,需要在单例对象上添加volatile关键字防止指令重排序 (7)最优雅的实现方式是使用枚举,其代码精简,没有线程安全问题,且 Enum 类内部防止反射和反序列化时破坏单例。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 7:32:23- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |