/** * 用 枚举实现单例 模式 * Created by zhaihuilin on 2018/6/8 16:31. */ public enum ThreadEnum { INSTANCE; /*** * 采用 枚举实现单例方式 也有唯一的缺点 就是并非使用 懒加载, 其单例模式对象 是在 枚举类被加载的时候 进行 初始化 */ }
/ ** * 由Thread0 改编解决静态内部类的方法无法防止利用反射来重复构建对象采用枚举的方式解决 *创建者zhaihuilin于2018/6/8 16:33。 * / public class Thread1 { // 私有的构造方法private Thread1 (){}; // 静态的内部类 私有静态类 LazyHolder { 私有静态最后 线程1 ThreadEnum = 新线程1(); } 公共静态 Thread1 getInstance(){ 返回 LazyHolder。ThreadEnum ; } public void get()throws NoSuchMethodException,IllegalAccessException,InvocationTargetException,InstantiationException { //获取单例构造器 构造函数构造函数= ThreadEnum。class .getDeclaredConstructor(); // 2. 把构造器设置为可访问 constructor.setAccessible(true); // 3. 使用newInstance()构造两个不同的对象 Thread0 thread00 =(Thread0)constructor.newInstance(); Thread0 thread01 =(Thread0)constructor.newInstance(); // 验证是否是同一个对象 系统。out .println(thread00.equals(thread01)); }
}