定义
是一种常用的软件设计模式,一个类再一个jvm中只有一个实例。
优缺点
在内存里只有一个实例,减少了内存的开销,尤其是频繁的创建和销毁实例;避免对资源的多重占用
不适用于变化的对象
创建方式
饿汉式 - 提前创建好,用到时候直接取
-- 是否为线程安全的 ?????
public class Singleton{
private static Singleton instance = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return instance;
}
}
懒汉式 - 类一加载就创建对象
public class Singleton{
private static Singleton instance = null;
private Singleton(){
}
public static Singleton getInstance(){
if(instance == null){
return new Singleton();
}
return instance;
}
}
线程安全的双检锁模式
public class Singleton {
//禁止指令重排序
//保证线程之间可见性
private static volatile Singleton instance = null;
private SingletonDemo() {
}
public static Singleton getInstance() {
if (instance == null) { //提高性能
synchronized (Singleton.class) {
if (instance == null) {
instance = new SingletonDemo();
}
}
}
return instance;
}