昆明Java培训班的老师今天给大家分享Java的对象池化技术org.apache.commons.pool2.ObjectPool。
org.apache.commons.pool2.ObjectPool提供了对象池,开发的小伙伴们可以直接使用来构建一个对象池
使用该对象池具有两个简单的步骤:
1、创建对象工厂,org.apache.commons.pool2.BasePooledObjectFactory已经对工厂有抽象实现,所以只需要继承该类,实现模板方法即可
package
com.seeyon.objectPool;
import
org.apache.commons.pool2.BasePooledObjectFactory;
import
org.apache.commons.pool2.PooledObject;
import
org.apache.commons.pool2.impl.DefaultPooledObject;
/**
* Created by yangyu on 16/12/26.
*/
/**
*对象工厂,用于创建对象
*/
public class
ObjectFactory extends BasePooledObjectFactory {
/**
*创建对象,返回你需要的对象实例就可以啦
* @return
* @throws Exception
*/
@Override
public Computer create() throws Exception {
return new Computer("mac");
}
/**
*包装对象,将对象包装为PooledObject
* @param obj
* @return
*/
@Override
public PooledObject
wrap(Computer obj) {
return new
DefaultPooledObject<>(obj);
}
public class Computer{
String name;
public Computer(String name){
this.name = name;
}
}
}
2、使用对象池
package
com.seeyon.objectPool;
import
org.apache.commons.pool2.ObjectPool;
import
org.apache.commons.pool2.impl.GenericObjectPool;
/**
* Created by yangyu on 16/12/26.
*/
/**
* org.apache.commons.pool2.ObjectPool对象池的使用
*直接apache使用对象池,可以实现对象池化技术
*/
public class
TestObjectPool {
public static void main(String[] args)
throws InterruptedException {
/**
*创建对象工厂
*/
ObjectFactory objectFactory = new
ObjectFactory();
/**
*创建一个普通的对象池
*/
ObjectPool objectPool = new
GenericObjectPool(objectFactory);
/**
*创建第一个线程
*/
Thread t1 = new Thread(() -> {
try {
/**
*从对象池中获取对象
*/
ObjectFactory.Computer computer
= objectPool.borrowObject();
System.out.println(Thread.currentThread().getId() + ":" +
computer);
/**
*用完后将对象放回对象池中
*/
objectPool.returnObject(computer);
} catch (Exception e) {
e.printStackTrace();
}
});
t1.start();
t1.join();
new Thread(() -> {
try {
/**
*再次从对象池中获取对象,你会发现获取的是同一个对象,说明对象池化技术成功
*/
System.out.println(Thread.currentThread().getId() + ":" +
objectPool.borrowObject());
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
}
3、输出结果:可以看到两个线程一先一后,使用的同一个对象,池化技术使用完成。
11:com.seeyon.objectPool.ObjectFactory$Computer@4e72fd4
12:com.seeyon.objectPool.ObjectFactory$Computer@4e72fd4
了解详情请登陆昆明达内Java培训官网(km.Java.tedu.cn)!