对象池的简单使用
1.添加maven依赖
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2.创建使用的对象
public class MyConnection {
public void open(){
System.out.println("open");
}
public void close(){
System.out.println("close");
}
3.集成BasePooledObjectFactory对象实现方法
public class ConnectionFactory extends BasePooledObjectFactory<MyConnection> {
//创建连接
@Override
public MyConnection create() throws Exception {
return new MyConnection();
}
//添加到连接池
@Override
public PooledObject<MyConnection> wrap(MyConnection connection) {
return new DefaultPooledObject<MyConnection>(connection);
}
/**
* 销毁对象
*/
@Override
public void destroyObject(PooledObject<MyConnection> p) throws Exception {
MyConnection connection = p.getObject();
connection.close();
super.destroyObject(p);
}
}
4.创建和配置对象池
public static void main(String[] args) throws Exception {
//创建对象池配置对象
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
//设置对象池最大容量
genericObjectPoolConfig.setMaxTotal(10);
//设置对象池最小容量
genericObjectPoolConfig.setMinIdle(10);
Long l=10L;
//设置对象池最大等待时间 超时报错
genericObjectPoolConfig.setMaxWaitMillis(l);
GenericObjectPool<MyConnection> MyConnectionpool=new GenericObjectPool<MyConnection>(new ConnectionFactory(),genericObjectPoolConfig);
for (int i = 1; i <= 11; i++) {
//对象池中拿走一个对象
MyConnection a1=MyConnectionpool.borrowObject();
if(i==5){
//模仿线程阻塞 循环借走11,单对象池只有10 此时达到对象上线 报错提示
Thread.sleep(1000);
MyConnectionpool.returnObject(a1); //对象还给对象池方法
}else{
System.out.println("a"+i+"==="+a1.toString());
}
}
}