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<ObjectFactory.Computer> { /**
* 创建对象,返回你需要的对象实例就可以啦
* @return
* @throws Exception
*/
@Override
public Computer create() throws Exception {
return new Computer("mac");
} /**
* 包装对象,将对象包装为PooledObject
* @param obj
* @return
*/
@Override
public PooledObject<Computer> 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<ObjectFactory.Computer> 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--对象池化技术 org.apache.commons.pool2.ObjectPool的更多相关文章
- 对象池化技术 org.apache.commons.pool
恰当地使用对象池化技术,可以有效地减少对象生成和初始化时的消耗,提高系统的运行效率.Jakarta Commons Pool组件提供了一整套用于实现对象池化的框架,以及若干种各具特色的对象池实现,可以 ...
- java对象池化技术
https://blog.csdn.net/tiane5hao/article/details/85957840 文章目录 先写一个简单通用的对象池 通过上面的通用池实现jedis连接池 连接池测试 ...
- Java对象池技术的原理及其实现
看到一片有关于java 对象基础知识,故转载一下,同时学习一下. 摘 要 本文在分析对象池技术基本原理的基础上,给出了对象池技术的两种实现方式.还指出了使用对象池技术时所应注意的问题. 关键词 对象池 ...
- java对象池commons-pool-1.6详解(一)
自己的项目中用到了 对象池 commons-pool: package com.sankuai.qcs.regulation.protocol.client; import com.dianping. ...
- 大数据技术之_27_电商平台数据分析项目_02_预备知识 + Scala + Spark Core + Spark SQL + Spark Streaming + Java 对象池
第0章 预备知识0.1 Scala0.1.1 Scala 操作符0.1.2 拉链操作0.2 Spark Core0.2.1 Spark RDD 持久化0.2.2 Spark 共享变量0.3 Spark ...
- Java 数据持久化系列之池化技术
在上一篇文章<Java 数据持久化系列之JDBC>中,我们了解到使用 JDBC 创建 Connection 可以执行对应的SQL,但是创建 Connection 会消耗很多资源,所以 Ja ...
- Java对象池
单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数.对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加 ...
- Java对象池示例
单例模式是限制了一个类只能有一个实例,对象池模式则是限制一个类实例的个数.对象池类就像是一个对象管理员,它以Static列表(也就是装对象的池子)的形式存存储某个实例数受限的类的实例,每一个实例还要加 ...
- commons-pool2 池化技术探究
一.前言 我们经常会接触各种池化的技术或者概念,包括对象池.连接池.线程池等,池化技术最大的好处就是实现对象的重复利用,尤其是创建和使用大对象或者宝贵资源(HTTP连接对象,MySQL连接对象)等方面 ...
随机推荐
- TODO:Linux安装PHP MongoDB驱动
TODO:Linux安装PHP MongoDB驱动 PHP利于学习,使用广泛,主要适用于Web开发领域. MongoDB的主要目标是在键/值存储方式(提供了高性能和高度伸缩性)以及传统的RDBMS系统 ...
- [翻译] AKKA笔记- ACTORSYSTEM (配置CONFIGURATION 与调度SCHEDULING) - 4(一)
原文在http://rerun.me/2014/10/06/akka-notes-actorsystem-in-progress/ 像我们前面看到的,我们可以用ActorSystem的actorof方 ...
- Android开发学习之路-二维码学习
这个月装逼有点少了,为什么呢,因为去考软件射鸡师了,快到儿童节了,赶紧写篇博纪念一下逝去的青春,唔,请忽略这句话. 二维码其实有很多种,但是我们常见的微信使用的是一种叫做QRCode的二维码,像下面这 ...
- 初学者--bootstrap(五)JavaScript插件(上)----在路上(6)
jQuery 插件为 Bootstrap 的组件赋予了“生命”.可以简单地一次性引入所有插件,或者逐个引入到你的页面中. 一:首先要确认的是,单个还是全部引入: JavaScript 插件可以单个引入 ...
- iOS----集成ijkplayer视频直播
ijkplayer 是一款做视频直播的框架, 基于ffmpeg, 支持 Android 和 iOS, 网上也有很多集成说明, 但是个人觉得还是不够详细, 在这里详细的讲一下在 iOS 中如何集成ijk ...
- Exception:HTTP Status 500 - org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)
主要错误信息如下: HTTP Status 500 - org.apache.ibatis.binding.BindingException: Invalid bound statement (not ...
- PHP从PHP5.0到PHP7.1的性能全评测
本文是最初是来自国外的这篇:PHP Performance Evolution 2016, 感谢高可用架构公众号翻译成了中文版, 此处是转载的高可用架构翻译后的文章从PHP 5到PHP 7性能全评测( ...
- SQL Server 更改跟踪(Chang Tracking)监控表数据
一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 主要区别与对比(Compare) 实现监控表数据步骤(Process) 参考文献(Refere ...
- android标题栏上面弹出提示框(二) PopupWindow实现,带动画效果
需求:上次用TextView写了一个从标题栏下面弹出的提示框.android标题栏下面弹出提示框(一) TextView实现,带动画效果, 总在找事情做的产品经理又提出了奇葩的需求.之前在通知栏显示 ...
- Android获取内置sdcard跟外置sdcard路径
Android获取内置sdcard跟外置sdcard路径.(测试过两个手机,亲测可用) 1.先得到外置sdcard路径,这个接口是系统提供的标准接口. 2.得到上一级文件夹目录 3.得到该目录的所有文 ...