知识点12:单例模式的实现
来源:互联网 发布:php上传txt文件 编辑:程序博客网 时间:2024/05/16 19:15
单例模式是比较容易在面试中出现的问题,一般要求是手写代码,比如我就试过了。。所以一定要打起十二分精神,要了解线程安全的、效率高的单例模式怎么实现。下面是几个代码,分别是从不好的到好的逐渐递进,这样才能灵活面对面试官的下一步发问。好了,话不多说,直接上代码:
实现一:
public class Singletop1 { /* * SingleTop的解法1: * 推荐指数:*** * 原因:只支持单线程环境 * */ private static Singletop1 instance = null; public static Singletop1 getSingletop1(){ if (instance == null) { instance = new Singletop1(); } //打印测试用例,可删除 System.out.println(instance.hashCode()); return instance; }}
实现二:
public class SingleTop2 { /* * SingleTop的解法2: * 推荐指数:*** * 原因:虽然在多线程环境中可以实现,但效率不高 * */ private static SingleTop2 instance2 = null; public static synchronized SingleTop2 getSingleTop2(){ if (instance2 == null) { instance2 = new SingleTop2(); } //打印测试用例,可删除 System.out.println(instance2.hashCode()); return instance2; }}
实现三:
public class SingleTop3 { /* * SingleTop的解法3: * 推荐指数:**** * 原因:适合多线程,效率可行,但结构复杂,不易理解 * */ private static Object synObject = new Object(); private static SingleTop3 instance3 = null; public static SingleTop3 getSingleTop3(){ if (instance3 == null) { synchronized (synObject) { if (instance3 == null) { instance3 = new SingleTop3(); } } } //打印测试用例,可删除 System.out.println(instance3.hashCode()); return instance3; }}
实现四:
public class SingleTop4 { /* * SingleTop的解法4: * 推荐指数:**** * 原因:线程安全,简洁,但效率同样较低,调用静态构造函数的时机不由程序员掌控 * */ private static final SingleTop4 instance4 = new SingleTop4(); public static SingleTop4 getSingleTop4(){ //打印测试用例,可删除 System.out.println(instance4.hashCode()); return instance4; }}
实现五:
public class SingleTop5 { /* * SingleTop的解法5: * 推荐指数:***** * 原因:利用嵌套类型的特性,做到只有在真正需要的时候才创建实例,既线程安全,又节省资源 * */ public static SingleTop5 getSingleTop5(){ //打印测试用例,可删除 System.out.println(Nested.instance5.hashCode()); return Nested.instance5; } private static class Nested{ private static SingleTop5 instance5 = new SingleTop5(); }}
如果你认真看了一遍以上五种实现方式,是否发现他们都是为了解决前面某种不足而被开发出来的呢?这就是一种递进性的理解。如果你从第一个实现方式开始看起,知道第五个实现方式也掌握了的话,那你对单例模式的理解也就到火候了。当然,实现单例模式并不止这五种方法,还有其他的形式,比如利用枚举也可以实现。因此,如果想要理解多一点的话,也可以上csdn找一下相关的博客,总不会让你失望的。
好了,这期博客到此结束,再见:
如有疑问,欢迎下方评论指出,共同进步
阅读全文
0 0
- 知识点12:单例模式的实现
- 【C++知识点】单例模式的简单实现
- corajava知识点---单例模式
- 单例模式知识点纠正
- 单例模式的实现
- 单例模式的实现
- 单例模式的实现
- 单例模式的实现
- 单例模式的实现
- 单例模式的实现
- 单例模式的实现
- 单例模式的实现
- 单例模式的实现
- 单例模式的实现
- Java知识点之单例设计模式
- Java单例模式知识点详解
- 传智播客JDBC_答疑学员提出的单例问题 2 知识点:单例模式
- Struts2 的单例模式的实现
- 数据结构实验之二叉树六:哈夫曼编码
- 兼容性小问题总结
- 安装caffe过程中出现的问题及解决方案
- printf("%p\n",&A::m_a) 中%p的意思
- android设置沉浸式状态栏
- 知识点12:单例模式的实现
- 【OSG】运行OSG示例出现的奶牛不完整问题
- 使用Qt Designer生成的ui文件的几种方式
- 一篇文章学会数据库操作语句(面试够用了)
- 鸟哥的Linux基础篇整理---2
- HX天龙
- Perl多进程与信号量
- VBA字典(dictionary)
- activemq 设置控制台密码