怎么查询网站是什么时候做的,网站前台页面的设计与实现,如何进入设计公司网站,国外网站上不去 dns我的相关文章#xff1a;
JavaSE 学习记录-CSDN博客 多线程笔记-CSDN博客 单例模式#xff08;Java实现#xff09;-CSDN博客 JUC笔记-CSDN博客 注解与反射#xff08;Java#xff0c;类加载机制#xff0c;双亲委派机制#xff09;-CSDN博客
1. 懒汉式线程不安全
pu…我的相关文章
JavaSE 学习记录-CSDN博客 多线程笔记-CSDN博客 单例模式Java实现-CSDN博客 JUC笔记-CSDN博客 注解与反射Java类加载机制双亲委派机制-CSDN博客
1. 懒汉式线程不安全
public class LazyUnsafeSingleton {private static LazyUnsafeSingleton singleton;private LazyUnsafeSingleton(){}public static LazyUnsafeSingleton getInstance() {if (singleton null) singleton new LazyUnsafeSingleton();return singleton;}
}2. 饿汉式线程安全
public class HungrySingleton {private static HungrySingleton singleton new HungrySingleton();private HungrySingleton(){}public static HungrySingleton getInstance() {return singleton;}
}3. 懒汉式线程安全 volatile synchronized public class LazySafeSingleton {private static volatile LazySafeSingleton singleton;private LazySafeSingleton(){}public static synchronized LazySafeSingleton getInstance() {if (singleton null) singleton new LazySafeSingleton();return singleton;}
}4. 双重检查锁
public class DoubleCheckedLockSingleton {private static volatile DoubleCheckedLockSingleton singleton;private DoubleCheckedLockSingleton(){}public static DoubleCheckedLockSingleton getInstance() {if (singleton null) {synchronized (DoubleCheckedLockSingleton.class) {if (singleton null) {singleton new DoubleCheckedLockSingleton();}}}return singleton;}
}5. 静态内部类
public class StaticInnerClassSingleton {private static StaticInnerClassSingleton singleton;private static class SingletonHolder {private static StaticInnerClassSingleton INSTANCE new StaticInnerClassSingleton();}public static StaticInnerClassSingleton getInstance() {return SingletonHolder.INSTANCE;}
}6. 枚举类型
public enum EnumSingleton {SINGLETON;public String doSomeThing() {return hello world;}
}测试类
public class SingletonTest {public static void main(String[] args) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, InterruptedException {// 1. 懒汉式线程非安全LazyUnsafeSingleton lazyUnsafeSingleton LazyUnsafeSingleton.getInstance();// 2. 饿汉式HungrySingleton hungrySingleton HungrySingleton.getInstance();// 3. 懒汉式线程安全LazySafeSingleton lazySafeSingleton LazySafeSingleton.getInstance();// 4. 双重检查锁DoubleCheckedLockSingleton doubleCheckedLockSingleton DoubleCheckedLockSingleton.getInstance();// 5. 静态内部类StaticInnerClassSingleton staticInnerClassSingleton StaticInnerClassSingleton.getInstance();// 6. 枚举类型EnumSingleton enumSingleton EnumSingleton.SINGLETON;enumSingleton.doSomeThing();// 反射无法破坏枚举类型的单例模式ClassEnumSingleton enumSingletonClass EnumSingleton.class;
// ConstructorEnumSingleton declaredConstructor enumSingletonClass.getDeclaredConstructor();Constructor? declaredConstructor enumSingletonClass.getDeclaredConstructors()[0];declaredConstructor.setAccessible(true);Object enumSingleton1 declaredConstructor.newInstance(); // java.lang.IllegalArgumentException// 7. 反射破坏非枚举类型的单例模式// 1获取 Singleton 类的 Class 对象ClassLazyUnsafeSingleton lazyUnsafeSingletonClass LazyUnsafeSingleton.class;// 2获取 Singleton 类的私有构造函数ConstructorLazyUnsafeSingleton constructor lazyUnsafeSingletonClass.getDeclaredConstructor();// 3设置私有构造函数的可访问性constructor.setAccessible(true);// 4使用私有构造函数创建新的实例LazyUnsafeSingleton lazyUnsafeSingletonFromReflect constructor.newInstance();// 打印新创建的实例和原始实例是否相等System.out.println(Original Instance: LazyUnsafeSingleton.getInstance());System.out.println(New Instance: lazyUnsafeSingletonFromReflect);System.out.println(Are instances equal? (LazyUnsafeSingleton.getInstance() lazyUnsafeSingletonFromReflect));}
}