单例 – 笔试
- 题目:请写出lazy单例
- 单例的分类:
- 懒汉式单例
- 饿汉式单例
懒汉式单例:
-
单例: 某个类在整个应用程序中只有一个实例
class T{ 多例: 多个实例 private T(){} private static T t; public static T getInstance(){ //判断当前类的实例是否已经存在,若存在,直接返回;若不存在,则创建实例并返回 if(t==null) t = new T(); return t; } } class Test: main: T t = T.getInstance(); 若T类的实例在整个应用程序中只能有一个,则为单例
-
如何实现懒汉式单例
核心点: 1. 构造方法私有化 2. 提供公有的static方法用于向外部提供实例 方法内部: 判断引用是否为null,为null,创建实例并返回;不为null,直接返回实例 3. 在成员变量位置声明私有的static的引用(只声明不初始化) -- 懒汉式体现 4. 多线程并发访问存在线程安全问题,将方法变为同步的 public class LazySingleton { private LazySingleton(){} private static LazySingleton lazySingleton; public synchronized static LazySingleton getInstance(){ if (lazySingleton==null) lazySingleton = new LazySingleton(); return lazySingleton; } }
饿汉式单例
public class HungrySingleton{ private HungrySingleton(){} private static HungrySingleton singleton = new HungrySingleton(); public static HungrySingleton getInstance(){ return singleton; } }