通用技术 [java][设计模式] 单例模式

bauul · 2017年09月10日 · 最后由 bauul 回复于 2017年09月11日 · 1584 次阅读

单例模式

设计为私有构造方法,不允许对象被 new 出来
这是一种创建型模式,主要用来创建只需要创建一次的对象,比如数据库连接,线程池创建等。

分类

按加载顺序分 “懒汉” 与 “饿汉” 式
按线程安全也可分为线程安全与非线程安全

package com.carl.singleton;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public final class ThreadPoolDirectLoad {

    private static ExecutorService threadPool = Executors.newFixedThreadPool(5);

    private ThreadPoolDirectLoad() {
    }

    public static ExecutorService getThreadPool() {
        return threadPool;
    }
}

package com.carl.singleton;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public final class ThreadPoolLazyLoad {

    private ThreadPoolLazyLoad() {
    }

    public static ExecutorService getThreadPool() {
        return Help.threadPool;
    }

    private static class Help {
        private static ExecutorService threadPool = Executors.newFixedThreadPool(5);
    }
}

package com.carl.singleton;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public final class ThreadPoolFactory {

    private enum ThreadPoolEnum {

        INSTANCE;

        private ExecutorService threadPool;

        private ThreadPoolEnum() {
            threadPool = Executors.newFixedThreadPool(5);
        }

        public ExecutorService getInstance() {
            return threadPool;
        }

    }

    public static ExecutorService getInstance() {
        return ThreadPoolEnum.INSTANCE.getInstance();
    }

}

其他

另外还有通过锁实现的懒汉与饿汉式,相对复杂些,工作中很少使用,
同样是达到线程安全的目的,我更喜欢枚举实现

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 2 条回复 时间 点赞

你应该根据王者荣耀来写一篇。比如 http://www.jianshu.com/p/61c5cdc5b791

恒温 回复

这个有点意思

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册