单例模式定义
单例模式的类负责创建自己的对象,同时确保只有单个对象背创建。并且这个类提供了一种访问其唯一的对象方式,可以直接访问不需要实力话对象。
使用场景
- 在内存中只有一个实例,减少了内存的开销,尤其频繁的创建和销毁(比如网站的首页)。
- 避免对资源的多重占用(比如文件的操作)
设计单例模式需要解决的问题
- 多线程问题
- 序列化可以破坏单例
多线程解决方案
饿汉式
在类加载时就创建对象,保证想要使用的时候就拿到对象,同时对象是在类加载的时候创建的保证类线程安全,但可能造成了不必要的开销,可能这个对象一直没被使用,但可以使用静态内部类的方式解决。
懒汉式
使用延迟的方式,设计对象的创建,但是要注意多线程的问题,加锁使用synchronized,但是也可能出现多线程的问题所以在家 volatile修饰对象,或者使用final 和枚举来实现。
序列化问题
只要在xxx类中定义readResolve
private Object readResolve() {
return singleton;
}
www.hollischuang.com/archives/13… (具体可学习该文章)