- 概念:单例模式确保某个类只有一个实例。下面是懒加载的单例模式
- 好记的方法:私有的构造函数、私有静态单例变量、公有静态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();
}
}
- 双层判空的作用:第一层提高代码效率,避免每次都进行对类加锁。第二层是保证线程安全,当有两个线程都走到了第一层的判断后,通过第二层的判断来保证只会创建有一个单例对象