您现在的位置是:首页 > 文章详情

单例模式实现

日期:2018-07-31点击:529

1. 单线程可用

public class Singleton {

    private static Singleton singleton;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (null == singleton) {
            singleton = new Singleton();
        }
        return singleton;
    }
}

2. 使用final常量

public class Singleton {

    private static final Singleton singleton = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return singleton;
    }
}

3. 加锁构造

public class Singleton {

    private static Singleton singleton;

    private static final Lock LOCK = new ReentrantLock();

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (null == singleton) {
            LOCK.lock();
            if (null == singleton) {
                singleton = new Singleton();
            }
            LOCK.unlock();
        }
        return singleton;
    }
}

4. 方法级加锁

public class Singleton {

    private static Singleton singleton;

    private Singleton() {
    }

    public static Singleton getInstance() {
        if (null == singleton) {
            init();
        }
        return singleton;
    }

    private static synchronized void init(){
        if(null == singleton){
            singleton = new Singleton();
        }
    }
}

5. 静态内部类实现,多线程可用

public class Singleton {

    private Singleton() {
    }

    public static Singleton getInstance() {
        return Container.singleton;
    }

    private static class Container {
        private static Singleton singleton = new Singleton();
    }
}

6. 拒绝强行反射创建我

public class Singleton {

    private Singleton() {
        if (null != Container.singleton) {
            throw new UnsupportedOperationException(); // 报错啦
        }
    }

    public static Singleton getInstance() {
        return Container.singleton;
    }

    private static class Container {
        private static Singleton singleton = new Singleton();
    }
}
原文链接:https://yq.aliyun.com/articles/621029
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章