首页 > 代码库 > 单例模式的几种写法
单例模式的几种写法
懒汉式 饿汉式就不多说了 体会代码 都不能防止反射机制攻击和反序列化
public class Singleton { private static final Singleton MYINSTANCE = new Singleton(); private Singleton() { super(); } public static Singleton getInstance() { return MYINSTANCE; }
}
/* * 饿汉式单例模式 线程安全 但是不能防止反射攻击 序列化会重新创建一个对象 */
public class Singleton2 { public static final Singleton2 MYINSTANCE= new Singleton2(); private Singleton2() { super(); }}/* * 饿汉式单例模式第二种写法 */
public class Singleton3 { private static Singleton3 mySinglenton; private Singleton3() { super(); }; public synchronized static Singleton3 getInstance() { return mySinglenton == null ? new Singleton3() : mySinglenton; }}/* * 懒汉单例模式 没有对象才造一个
* 不能防止java的反射攻击 java反射机制可以构造私有化的构造方法 线程不安全 可能存在两个以上线程同时判断引用为空 * 可以加锁解决 */
还有《高效java编程》中写的枚举式单例模式 线程安全 还能防止反射攻击 对应的开销也会加大
体会代码
public enum Singleton4 { INSTANCE; public Singleton4 getInstance() { return INSTANCE; }}
还有种注册登记机制 用的还是饿汉式 只是构建了一个map map里没有写入map一个实例 适合大量单例模式
综上一般写饿汉式肯定没问题 需要序列化对象时再用枚举式的 以上
单例模式的几种写法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。