common-pool2讲解。
现在很多第三⽅框架都使⽤common-pool2作为对象池。
这个框架有⼏个核⼼:
⼀:⼯作类,⽐如说connetion,⽐如说⼀个可以⼲活(work)的Person。
⼆:⼯⼚类,⽣产Person的⼯⼚。⼯⼚类是基于PooledObjectFactory->BaPooledObjectFactory的三:配置类,对象池活跃对象个数等信息都需要配置:所遇需要配置类,基于GenericObjectPoolConfig 四:对象池Pool,GenericObjectPool
实例讲解:
1 Person类。
public class Person {
private String name;
public String getName() {
return name;
}
public void tName(String name) {
this.name = name;
}
public void work() {
System.out.println(name + " 在⼲活 ");
}
}
2⼯⼚类
public class PersonFactory extends BaPooledObjectFactory<Person> {
public Person create() throws Exception {
String name = Math.random() + "";
Person p = new Person();
p.tName(name);
return p;
}
public PooledObject<Person> wrap(Person obj) {
return new DefaultPooledObject<Person>(obj);
}
}
3配置
public class MyPoolConfig extends GenericObjectPoolConfig {
//在构造⽅法中可以配置参数,⼀般会在spring的xml⽂件中配置bean的⽅式配置对象池信息
public MyPoolConfig() {
super();
}
}
4测试运⾏
public class Main {
public static void main(String[] args) throws Exception {
// 实例化配置类
MyPoolConfig myPoolConfig = new MyPoolConfig();
/
/ 设置最⼤⼯作⼈数
myPoolConfig.tMaxTotal(10);
// new ⼀个对象池。
GenericObjectPool<Person> personPool = new GenericObjectPool<>( new PersonFactory(), myPoolConfig);
// 测试1;
while (true) {
// 取出对象进⾏⼯作,没有释放对象。
Person p = personPool.borrowObject();
p.work();
// 代码运⾏后显⽰,最多有10个不同的⼈在⼯作
}
}
}
==
==