最近看到一篇关于单例模式较为详细的讲解的文章: 下面对此文章进行摘录 (java)
// version 1.0 最为朴素的单例模式实践; public class singleton { private static singleton singleton = null; private singleton() { } public static singleton getinstance() { if (singleton== null) { singleton= new singleton(); } return singleton; } }
singleton特点:
singleton多线程版本优化:
// version 1.4 多线程强化版本,使用双重检查和 volatile 进行屏蔽多线程作用; public class singleton { private volatile static singleton singleton = null; private singleton() { } public static singleton getinstance() { if (singleton== null) { synchronized (singleton.class) { if (singleton== null) { singleton= new singleton(); } } } return singleton; } }
// version 1.5 把类的创建委托给类装载器来进行创建; public class singleton { private volatile static singleton singleton = new singleton(); private singleton() { } public static singleton getinstance() { return singleton; } }
// version 1.6 使用私有内部类来进行隐藏,使得只有再getinstance 函数被调用的时候,类才会被闯将,使得类的创建可控; public class singleton { private static class singletonholder { private static final singleton instance = new singleton(); } private singleton (){} public static final singleton getinstance() { return singletonholder.instance; } }
使用上面三个版本进行创建,都可以保证线程安全;具体相关的议论,可以参考:
保持更新;更多内容请关注cnblogs.com/xuyaowen;
如对本文有疑问, 点击进行留言回复!!
【面试题】研究过tomcat的NioEndpoint源码吗?请阐述下Reactor多线程模型在tomcat中的实现。
荐 厉害了!阿里P8架构师用4大技术文档带你深入解读爆火的中台战略
网友评论