基于类加载实现的, 存放于元空间, 应为是static的 在类加载的时候就会创建
为什么不用,会造成内存浪费?...应为在方法上加上了内置锁, 并且方法是static的, 所以是类锁, 保证了所有的线程访问这个方法都必须排队, 所以保证了线程安全
有什么效率问题?...但是JAVA的无序写入可能会造成顺序的颠倒,即
内存分配 -> 返回对象引用 -> 初始化
这种情况下对应到(//创建实例)就是singleton已经不是null,而是指向了堆上的一个对象,但是该对象却还没有完成初始化动作...应为在类锁的,外部和内部都有检查, 在创建一次之后,以后就不会走类锁了, 所以后续不会排队
总结
没错, 写不出来缺点, 就用这种吧
静态内部类
步骤
私有化构造
声明静态成员
声明静态内部类
内部类声明属性...应为类只有在第一次调用或者其他类依赖的时候才会进行类加载, 类加载, 这个内部类没有没其他类依赖, 并且是内部的所以在加载外部类的时候,也不会加载内部类, 只有第一次调用 getInstance方法时才会触发类加载