查看网站是哪家做的怎么看,鞍山网站制作公司,成都互联网外包公司,合肥建设网网站单例模式
某个类任何情况下只有一个实例#xff0c;并提供一个全局访问点来获取该实例。Java6种单例模式#xff1a;2种懒汉式#xff0c;2种饿汉式 #xff0c;静态内部类 #xff0c;枚举类懒汉式
synchronized延迟加载
public class Singleton {private static Sing…单例模式
某个类任何情况下只有一个实例并提供一个全局访问点来获取该实例。Java6种单例模式2种懒汉式2种饿汉式 静态内部类 枚举类懒汉式
synchronized延迟加载
public class Singleton {private static Singleton instance;private Singleton(){}public static synchronized Singleton getInstance(){ //synchronized锁住getInstance方法if (instancenull) { //延迟加载instance new Singleton();}return instance;}
}
volatilesynchronized双检锁
public class Singleton {private volatile static Singleton instance; //volatile修饰实例private Singleton(){}public static Singleton getInstance(){if (instancenull) {synchronized(Singleton.class){ //synchronized锁住Singleton对象if (instancenull) {instance new Singleton();}}}return instance;}
}
饿汉式—类加载时触发实例化避免了多线程同步问题
类加载时初始化静态实例
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; static{ instance new Singleton(); //在静态代码块里初始化实例}private Singleton() {}public static Singleton getInstance() {return instance;}
}
静态内部类方式—实现了延迟加载
调用静态内部类时在静态内部类里初始化实例
public class Singleton {//定义静态内部类private static class InnerSingleton {private static final Singleton INSTANCE new Singleton(); //初始化完成Singleton类静态实例}private Singleton() {}public static Singleton getInstance() {return InnerSingleton.INSTANCE; //返回静态内部类里的静态实例}
}
枚举类方式–既能避免多线程同步问题又能防止反序列化重新创建对象
创建一个枚举枚举成员为INSTANCE。使用枚举类.INSTANCE即可获取实例
package acc;public enum Singleton {INSTANCE; //定义1个唯一的成员INSTANCE//枚举类里的公共方法public void doSomething() {System.out.println(r2323t23);}
}public class TestSingleton {public static void main(String[] args) {//使用枚举类.INSTANCE即可获取实例Singleton.INSTANCE.doSomething();}
}