剑指offer|面试题2:实现Singleton模式
2016-10-12 10:40
369 查看
题目:设计一个类,我们只能生成该类的一个实例。
注:其实这个代码我在面试网易的时候,面试官说了应该对 实例变量再加一个修饰符:volatile,
是为了保证在多个线程访问单例变量时都有去主存,而不能私自使用cache,所以只要修改一行代码即可:
private static volatile Singleton singleton = null;
书上主要推荐三种写法:
1)加同步锁且前后两次判断实例是否存在
public class Singleton{ private static Object synObject = new Object(); private static Singleton singleton = null; private Singleton(){ } public static Singleton getInstance(){ if(singleton==null){ synchronied(synObject){ if(singleton==null){ singleton = new Singleton();//这一步 } } } return singleton; } }
注:其实这个代码我在面试网易的时候,面试官说了应该对 实例变量再加一个修饰符:volatile,
是为了保证在多个线程访问单例变量时都有去主存,而不能私自使用cache,所以只要修改一行代码即可:
private static volatile Singleton singleton = null;
2)利用静态构造函数(推荐)
public class Singleton{ private static Singleton singleton = new Singleton(); private Singleton(){ } public static Singleton getInstance(){ return singleton; } }
3)实现按需创建实例(推荐)
上面的利用静态构造函数唯一的缺点是类加载时就初始化了单例实例,下面按需创建实例:public class Singleton{ private Singleton(){ } public static Singleton getInstance(){ return SingletonHolder.instance; } //静态内部类 private static class SingletonHolder{ private static Singleton instance = new Singleton(); } }
相关文章推荐
- 【剑指offer】面试题二:实现Singleton模式
- 剑指Offer:面试题2 实现Singleton模式
- 剑指Offer学习之面试题2 : 实现Singleton 模式
- 剑指Offer 面试题2 : 实现Singleton(单例)模式——七种实现方式
- 【剑指Offer学习】【面试题2 : 实现Singleton 模式——七种实现方式】
- 剑指offer 面试题2 实现单例模式
- 【剑指offer】第二题:实现Singleton (单例)模式
- 剑指Offer之面试题2:实现Singleton
- 【剑指offer】题2:实现单件(singleton)模式
- 剑指offer之实现Singleton(单例)模式
- 剑指offer - 实现Singleton模式
- <剑指offer 面试题2> 单例模式 (Java实现)
- 【剑指offer】面试题2:实现Singleto模式 java
- 剑指offer2 - 实现singleton模式
- 剑指offer 面试题2—实现单例模式
- 剑指offer-面试题2.实例Singleton模式
- 剑指 offer set 28 实现 Singleton 模式
- 剑指offer 面试题2—实现单例模式
- 剑指offer-面试题2 实现单例模式
- 【剑指Offer学习】【面试题7:用两个栈实现队列】