话不多说,直接看实现方案例。
项目启动时加载
public class Test { private static Test ins = new Test(); public static Test instance() { return ins; }}
在项目启动时就被加载 → 项目启动变慢 如果对象不经常使用的话还存在浪费资源的问题。
懒加载,在使用时才被加载
public class Test { private static Test ins; public static synchronized Test instance() { if (ins == null) ins = new Test(); return ins; }}
在项目启动时并不加载 → 项目加载变快 第一次使用时加载 → 存在第一次使用时等待过长的问题 使用synchronized方法 → 性能下降
懒加载,在使用时才被加载(解决并发的性能问题)
public class Test { private static Test ins; public static Test instance() { if (ins == null) { synchronized (Test.class) { if (ins == null) ins = new Test(); } } return ins; }}
在项目启动时并不加载 → 项目加载变快 第一次使用时加载 → 存在第一次使用时等待过长的问题 使用双重判断方法 → 相对优化前性能提升 不推荐使用
懒加载,在使用时才会被加载(无并发性能问题)
public class Test { private static Singleton { private static final Test ins = new Test(); } public static Test instance() { return Singleton.ins; }}
在项目启动时并不加载 → 项目加载变快 第一次使用时加载 → 存在第一次使用时等待过长的问题 推荐使用
public enum Test { INSTANCE; public static Test instance() { return INSTANCE; }}
在项目启动时就被加载 → 项目启动变慢 如果对象不经常使用的话还存在浪费资源的问题。 推荐使用
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。