单例模式(饿汉和饱汉)
原文地址:https://www.cnblogs.com/ylq1990/p/7898371.html
参考文章:https://blog.csdn.net/android_cyw/article/details/75667926
public class Demo { // 饿汉式 在类加载的时候已经初始化该对象 static Demo demo = new Demo(); private Demo(){ } public static Demo getInstance(){ return demo; }
优:线程安全
缺:getInstance有可能不会被执行,占用资源
// 懒汉式 判断对象是否存在再创建对象 static Demo demo ; private Demo(){ } public static Demo getInstance(){ if(demo == null){ demo = new Demo(); } return demo; }
优:节省资源
缺:线程不安全
public class Demo { // 懒汉式 (上锁) static Demo demo ; private Demo(){ } public static Demo getInstance(){ if(demo == null){ synchronized (Demo.class){ if(demo == null){ demo = new Demo(); } } } return demo; }
优:节省资源,线程安全
缺:第一次加载时反应不快,由于java内存模型一些原因偶尔失败
public class Demo { // 懒汉式 (上锁) private Demo(){ } private static class DemoEx{ static Demo demo = new Demo(); } public static Demo getInstance(){ return DemoEx.demo; } }
优:节省资源,getInstance 不被调用 DemoEx类便不会被加载
缺:第一次加载时较慢