java对象池简单实例
- 自定义一个实体类
package com.fran.pools;
public class User {
private String name;
private String age;
public User() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
- 自定义UserPool,继承自GenericObjectPool
package com.fran.pools;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.AbandonedConfig;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
public class UserPool extends GenericObjectPool<User> {
public UserPool(PooledObjectFactory<User> factory) {
super(factory);
}
public UserPool(PooledObjectFactory<User> factory, GenericObjectPoolConfig config) {
super(factory, config);
}
public UserPool(PooledObjectFactory<User> factory, GenericObjectPoolConfig config, AbandonedConfig abandonedConfig) {
super(factory, config, abandonedConfig);
}
}
- 自定义UserFactory,继承自BasePooledObjectFactory
package com.fran.pools;
import org.apache.commons.pool2.BasePooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
public class UserFactory extends BasePooledObjectFactory<User> {
public static void main(String[] args) throws Exception {
UserFactory userFactory = new UserFactory();
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
genericObjectPoolConfig.setMaxTotal(5);
genericObjectPoolConfig.setMaxIdle(5);
genericObjectPoolConfig.setMaxWaitMillis(1000);
UserPool userPool = new UserPool(userFactory, genericObjectPoolConfig);
for (int i = 0; i<=5; i++) {
User user = userPool.borrowObject();
System.out.println(user.hashCode());
if(i == 4) {
userPool.returnObject(user);
}
}
}
@Override
public User create() throws Exception {
User user = new User();
Thread.sleep(1000);
return user;
}
@Override
public PooledObject<User> wrap(User user) {
return new DefaultPooledObject<>(user);
}
}
- 代码执行后,结果如下,前五次生成间隔时间为1s,最后一个无需1s。
- 遇到问题,未实现wrap方法导致空指针异常
- 依赖的maven文件
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
<version>2.4.2</version>
</dependency>