public class Singleton {
// 饿汉式 线程安全,类加载时就被初始化了 没有实现懒加载
/*private Singleton() {}
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}*/
// 懒汉式一,线程不安全
/*private Singleton (){}
private static Singleton instance = null;
public static Singleton getInstance (){
if (null == instance) {
instance = new Singleton();
}
return instance;
}
*/
// 懒汉式二,线程安全同步锁定方法,每次获取单例都要锁定整个方法
/* private Singleton(){}
private static Singleton instance = null;
public synchronized static Singleton getInstance () {
if (null == instance) {
instance = new Singleton();
}
return instance;
}*/
// 懒汉式三
//同步代码块方式,线程安全,只在第一次获取单例时锁定了单例对象,高效
/*private Singleton(){}
private static Singleton instance = null;
public static Singleton getInstance() {
if (null == instance) {
synchronized (Singleton.class) {
if (null == instance) {
instance = new Singleton();
}
}
}
return instance;
}*/
/**
* 静态内部类实现, 推荐
* 线程安全,懒加载,效率高; 静态内部类的凡是在单例类在被JVM加载到内存时并不会立即实例化,而是在第一次调用
* getInstance()方法时才会将SingleTonInner类加载到内存,从而实例化SingleTonInner的静态属性
* SINGLETON,才开始加载实例化SINGLETON。并且在实例化SINGLETON的时候,JVM帮助我们保证了线程的安全
*/
private Singleton(){}
public static Singleton getInstance (){
return SingletonInner.INSTANCE;
}
private static class SingletonInner {
private static final Singleton INSTANCE = new Singleton();
}
/**
* 枚举类实现
*/
/*private Singleton(){ }
public static Singleton getInstance(){
return SinglteonEnum.INSTANCE.getInstanceEnum();
}
private enum SinglteonEnum {
INSTANCE;
private Singleton singlteon;
SinglteonEnum() {
singlteon = new Singleton();
}
private Singleton getInstanceEnum(){
return singlteon;
}
}*/
}
JAVA 单例模式的几种写法
最新推荐文章于 2023-07-11 21:27:54 发布