【memcached】initialize是不是一个问题?

版本:gwhalin-Memcached-Java-Client-release_2.6.1-0-gab2cc7e

 

在memcached使用中:

 

static {
	String[] serverlist = { "cache0.server.com:12345", "cache1.server.com:12345" };
	SockIOPool pool = SockIOPool.getInstance();
	pool.setServers(serverlist);
	pool.initialize();
}
 

最后需要对pool进行initialize();其实就是调用的SchoonerSockIOPool的initialize:

 

public void initialize() {
	schoonerSockIOPool.initialize();
}
 

而在SchoonerSockIOPool初始化中,

 

public void initialize() {
	initDeadLock.lock();
	try {

		// if servers is not set, or it empty, then
		// throw a runtime exception
		if (servers == null || servers.length <= 0) {
			log.error("++++ trying to initialize with no servers");
			throw new IllegalStateException("++++ trying to initialize with no servers");
		}
		// pools
		socketPool = new HashMap<String, GenericObjectPool>(servers.length);
		hostDead = new ConcurrentHashMap<String, Date>();
		hostDeadDur = new ConcurrentHashMap<String, Long>();
		// only create up to maxCreate connections at once

		// initalize our internal hashing structures
		if (this.hashingAlg == CONSISTENT_HASH)
			populateConsistentBuckets();
		else
			populateBuckets();

		// mark pool as initialized
		this.initialized = true;

	} finally {
		initDeadLock.unlock();
	}

}
 

在初始化最后设置了this.initialized = true

 

如果拿到的是同一个SchoonerSockIOPool,就会又一次初始化,这个算不算一个bug?

 

--------------------

 

在自己编程序的时候,把pool的设置集中在一个地方,只进行一次,这样应该就不会有什么问题了。

 

下面就是在MemCachedClient 中,使用这些Pool了

 

 

 

 

 

你可能感兴趣的:(memcached)