设计模式--单例模式原理

  • 概念:单例模式确保某个类只有一个实例。下面是懒加载的单例模式
  • 好记的方法:私有的构造函数私有静态单例变量、公有静态getInstance方法
public class CustomJedisPoolUtils {
    private CustomJedisPoolUtils(){}

    private static CustomJedisPool jedisPool = null;

    public static CustomJedisPool getJedisPool() {
        if (jedisPool == null) {
            synchronized (CustomJedisPoolUtils.class) {
                if (jedisPool == null) {
                    JedisPoolConfig poolConfig = new JedisPoolConfig();
                    poolConfig.setNumTestsPerEvictionRun(-1);// 这个配置项可以不用显式指定,jedispoolConfig默认给的是-1,这里写出来只是为了解释下-1的含义:对连接池中的所有空闲连接进行检查
                    poolConfig.setTimeBetweenEvictionRunsMillis(-1); //逐出扫描的时间间隔(毫秒) 如果为负数,则不运行逐出线程, 默认-1
                    poolConfig.setMinEvictableIdleTimeMillis(24*3600000);//逐出连接的最小空闲时间 默认1800000毫秒(30分钟)
                    poolConfig.setMaxTotal(50);   //	设置最大连接数
                    poolConfig.setMaxIdle(50);    //最大空闲连接数, 默认8个
                    poolConfig.setMinIdle(0);
                    poolConfig.setTestWhileIdle(true);//在空闲时检查有效性, 默认false

                    final ApiInfo apiInfo = ApiInfo.build().
                            setUrl("https=0")
                            .setRole(Role.MASTER).create();
                    jedisPool = new CustomJedisPool(poolConfig, apiInfo, "da");
                }
            }
        }
        return jedisPool;
    }

    public static void returnJedisPool() {
        jedisPool.close();
    }

}
  • 双层判空的作用:第一层提高代码效率,避免每次都进行对类加锁。第二层是保证线程安全,当有两个线程都走到了第一层的判断后,通过第二层的判断来保证只会创建有一个单例对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值