设计模式中的单例模式和懒汉模式
2021/6/2 18:29:40
本文主要是介绍设计模式中的单例模式和懒汉模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
单例模式指的是一个类只有一个实例化对象,懒汉模式是只有在使用的时候才去创建实例化对象。
//单例模式,构造方法必须是私有的,私有化保证了别的地方不会实例化。 //缺点是在类加载的时候就实例化了一次对象 public class Mgr01 { private static final Mgr01 mgr01=new Mgr01(); private Mgr01(){ } public static Mgr01 getInstance(){ if(mgr01==null){ return null; }else{ return mgr01; } } public static void main(String[] args) { Mgr01 a=Mgr01.getInstance(); Mgr01 b=Mgr01.getInstance(); System.out.println(a==b); } }
//懒加载。缺点是懒加载会引发出线程不安全的问题 //线程不安全问题可以使用加锁的方式解决,加锁使用的是double+check+lock //此处必须有volatile,因为在对象初始化的时候会存在指令重排的现象,这样对象会是一个不完整的对象。volatile会防止指令重排。 public class Mgr03 { private static volatile Mgr03 mgr03; private Mgr03(){ } public static Mgr03 getInstance(){ if(mgr03==null){ synchronized (Mgr03.class) { if(mgr03==null){ try { Thread.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } mgr03=new Mgr03(); } } } return mgr03; } public static void main(String[] args) { for (int i = 0; i <1000 ; i++) { new Thread(()->{ System.out.println(Mgr03.getInstance().hashCode()); }).start(); } } }
//完美的解决方案可以使用静态内部类的方式,不需要加锁 public class Mgr04 { private Mgr04(){ } public static class Mgr041{ private static final Mgr04 mgr04=new Mgr04(); } public static Mgr04 getInstance(){ return Mgr041.mgr04; } public static void main(String[] args) { for (int i = 0; i <1000 ; i++) { new Thread(()->{ System.out.println(Mgr04.getInstance().hashCode()); }).start(); } } }
这篇关于设计模式中的单例模式和懒汉模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)
- 2024-05-30【Java】百万数据excel导出功能如何实现