设计模式之单例模式(线程安全)
2023-09-11 14:21:35 时间
可以说单例模式是所有设计模式中最简单的一种。
单例模式就是说系统中对于某类的只能有一个对象,不可能出来第二个。
单例模式也是23中设计模式中在面试时少数几个会要求写代码的模式之一。主要考察的是多线程下面单例模式的线程安全性问题。
1.多线程安全单例模式实例一(不使用同步锁)
1 public class Singleton { 2 private static Singleton sin=new Singleton(); ///直接初始化一个实例对象 3 private Singleton(){ ///private类型的构造函数,保证其他类对象不能直接new一个该对象的实例 4 } 5 public static Singleton getSin(){ ///该类唯一的一个public方法 6 return sin; 7 } 8 }
上述代码中的一个缺点是该类加载的时候就会直接new 一个静态对象出来,当系统中这样的类较多时,会使得启动速度变慢 。现在流行的设计都是讲“延迟加载”,我们可以在第一次使用的时候才初始化第一个该类对象。所以这种适合在小系统。
2.多线程安全单例模式实例二(使用同步方法)
1 public class Singleton { 2 private static Singleton instance; 3 private Singleton (){ 4 5 } 6 public static synchronized Singleton getInstance(){ //对获取实例的方法进行同步 7 if (instance == null) 8 instance = new Singleton(); 9 return instance; 10 } 11 }
上述代码中的一次锁住了一个方法, 这个粒度有点大 ,改进就是只锁住其中的new语句就OK。就是所谓的“双重锁”机制。
3.多线程安全单例模式实例三(使用双重同步锁)
1 public class Singleton { 2 private static Singleton instance; 3 private Singleton (){ 4 } 5 public static Singleton getInstance(){ //对获取实例的方法进行同步 6 if (instance == null){ 7 synchronized(Singleton.class){ 8 if (instance == null) 9 instance = new Singleton(); 10 } 11 } 12 return instance; 13 } 14 15 }
相关文章
- 第二章 线程安全
- 自定义Dictionary支持线程安全
- Invoke-WebRequest : 请求被中止: 未能创建 SSL/TLS 安全通道。
- PHP 源码探秘 - 线程安全的实现原理
- HashMap在高并发下如果没有处理线程安全会有怎样的安全隐患,具体表现是什么
- 安全测试全面总结-5-shell命令注入漏洞
- 安全需求提取
- 公共云急需大量的安全运维人才
- @开发者 云端一条生产线,让软件开发更敏捷、更安全
- 局部变量是线程安全的,原因是什么
- Spring框架中的单例Bean是线程安全的吗?
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | 解压 apk 文件 | 判定是否是第一次启动 | 递归删除文件操作 | 解压 Zip 文件操作 )
- Servlet的多线程和线程安全
- Android网络(4):HttpClient必经之路----使用线程安全的单例模式HttpClient,及HttpClient和Application的融合
- 线程安全:局部静态变量的初始化
- 安全测试===8大前端安全问题(下)
- golang map线程不安全 会竞争
- C#多线程实践-锁和线程安全
- 从源头开始学习 Java 单例模式:线程安全和性能的双重保障
- 2023中职网络安全竞赛Web安全应用任务解析答案