java的池化技术_Java的对象池化技术

昆明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)!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值