有一个类 RedisLogger.java 用于处理带有 redis 的记录器。在 RedisLogger.java 中,我jedisPool使用以下代码声明了一个静态 JedisPool 字段:
private static JedisPool jedisPool;
因为 JedisPool 是线程安全的 calss,我只想jedisPool在我的应用程序中使用以下代码实例化一次:
public static JedisPool getJedisPool() {
if(jedisPool == null) {
synchronized (JedisPool.class) {
if(jedisPool == null) {
jedisPool = new JedisPool();
}
}
}
return jedisPool;
}
我用这段代码来测试它。
ExecutorService executor = Executors.newCachedThreadPool();
for(int i = 0; i < 1000; i++) {
executor.execute(()->{
System.out.println(RedisLogger.getJedisPool());
});
}
从输出看来效果很好:
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
redis.clients.jedis.JedisPool@3d11fc5d
....
但它真的能达到我的期望吗?因为在我的应用程序中有很多这样的地方。例如。
private static Cluster getCluster() {
if(cluster == null) {
synchronized (Cluster.class) {
if(cluster == null) {
Builder builder = Cluster.builder();
for (int i = 0; i < MSConfig.SRCDOC_CASSANDRA_ADDRS().length; i++) {
builder.addContactPoint(MSConfig.SRCDOC_CASSANDRA_ADDRS()[i])
.withPort(MSConfig.SRCDOC_CASSANDRA_PORT()[i]);
}
婷婷同学_
12345678_0001
ibeautiful
相关分类