单例模式的优缺点
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、时间和空间 比较上面两种写法:懒汉式是典型的时间换空间,也就是每次获取实例都会进行判断,看是否需要创建实例,浪费判断的时间。当然,如果一直没有人使用的话,那就不会创建实例,则节约内存空间。 饿汉式是典型的空间换时间,当类装载的时候就会创建类实例,不管你用不用,先创建出来,然后每次调用的时候,就不需要再判断了,节省了运行时间。 2、线程安全 (1)从线程安全性上讲,不加同步的懒汉式是线程不安全的,比如,有两个线程,一个是线程A,一个是线程B,它们同时调用getInstance方法,那就可能导致并发问题。如下示例: 复制代码 public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } 复制代码 程序继续运行,两个线程都向前走了一步,如下: 复制代码 public static Singleton getInstance(){ if(instance == null){ instance = new Singleton(); } return instance; } 复制代码 (2)饿汉式是线程安全的,因为虚拟机保证只会装载一次