【Effective Java】3.单例

传统单例

private 构造函数

最优单例实现:使用Enum

1.无需担心序列化

先说说传统单例,其如果序列化再反序列化产生的效果和构造一个新的对象差不多的。除非增加以下来阻止:

//readResolve to prevent another instance of Singleton
    private Object readResolve(){
        return INSTANCE;
    }

而Enum自身源码中已实现防护代码:

/**
     * prevent default deserialization
     */
    private void readObject(ObjectInputStream in) throws IOException,
        ClassNotFoundException {
        throw new InvalidObjectException("can't deserialize enum");
    }

    private void readObjectNoData() throws ObjectStreamException {
        throw new InvalidObjectException("can't deserialize enum");
    }

2.无需double-check,方便安全

并且枚举创建的单例在JVM层面上也能保证实例是thread-safe的。

/**
* Singleton pattern example using Java Enumj
*/
public enum EasySingleton{
    INSTANCE;
}

使用单例的时候用EasySingleton.INSTANCE 就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值