0
点赞
收藏
分享

微信扫一扫

java objectpool 对象池


 

jdk内部对象池有三个,接口为ObjectPool

GenericObjectPool

StackObjectPool

SoftReferenceObjectPool

带有可以的对象池

StackKeyObjectPool

GenericKeyObjectPool

对应对象池的对象池工厂,接口为PoolableObjectPool

BasePoolableObjectFactory 基本对象池方法

package com.test.objPool;

import java.util.NoSuchElementException;

import org.apache.tomcat.dbcp.pool.ObjectPool;
import org.apache.tomcat.dbcp.pool.impl.StackObjectPool;

import com.test.objPool.ObjectPoolableFactory.oneObject;

public class TestForObjPool {
	public static void main(String[] args)
	{
		ObjectPool pool = new StackObjectPool(new ObjectPoolableFactory());
		try {
			for(int i=0;i<10;i++)
			{
				oneObject user = (oneObject)pool.borrowObject();
				user.name = "Borned";
				user.sayMyName();
				oneObject user2 = (oneObject)pool.borrowObject();
				user2.name="Borned2222";
				user2.sayMyName();
				pool.returnObject(user);
				oneObject user3 = (oneObject)pool.borrowObject();
				user3.name="Borned3333";
				user3.sayMyName();
				pool.returnObject(user2);
				pool.returnObject(user3);
			}
		} catch (NoSuchElementException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalStateException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

}

 

package com.test.objPool;

import org.apache.tomcat.dbcp.pool.BasePoolableObjectFactory;

public class ObjectPoolableFactory extends BasePoolableObjectFactory{

	int i=0;
	
	@Override
	public Object makeObject() throws Exception {
		// TODO Auto-generated method stub
		System.out.println("===================="+i);
		return new oneObject();
	}
	
	public void passivateObject(Object one)
	{
		oneObject oObj = (oneObject)one;
		oObj.clear();
	}
	
	class oneObject
	{
		int num = ++i;
		String name = "";
		void sayMyName()
		{
			System.out.println(i+"   "+num+"((((((((("+name+")))))))))");
		}
		public oneObject()
		{
			System.out.println("--start---generate a object");
			System.out.println(num);
			System.out.println("--end----------------------");
		}
		public void clear()
		{
			name = "";
			System.out.println("%%%%%%%retrive%%%%%%%%%%");
		}
	}

}

 

 

举报

相关推荐

0 条评论