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连接对象)等方面 ...
随机推荐
- 现代程序设计 网页前端开发作业(to 邹欣老师)
在一些著名的网站的搜索框上,会有一种“自动完成”功能. 比如google.百度和淘宝: 现在,我们来考虑如何实现这个功能. 第一步:模仿任意一个网站,编写一个类似的网页效果原型. 在这一步,不要估计开 ...
- Leetcode 刷题计划
Two Sum 21.4% Medium Given an array of integers, return indices of the two numbers such that t ...
- DOM访问元素样式和操作元素样式
在HTML中定义样式的方式有三种:通过<link/>元素包含外部样式表文件(外部样式表).使用<style/>元素定义嵌入式样式(嵌入式样式表).使用style特性定义针对特定 ...
- Python格式化输出
今天写程序又记不清格式化输出细节了……= =索性整理一下. python print格式化输出. 1. 打印字符串 print ("His name is %s"%("A ...
- 《JavaScript语言精粹》—— 读书总结
话说这本书还是同学的推荐才读的,之前感觉这本书太薄了,不值得看,没想到小身材有大智慧,书中的内容总结的还是很到位的!所以就把最后几章,精华的部分整理整理. 优美的特性 函数是顶级对象 在JS中,没有块 ...
- 《FaceBook效应》——读后总结
这本书讲述了facebook从如何创建.到风靡全球,并结合facebook的网络效应讲述为什么facebook可以做到社交龙头.读这本书的时候,也可以看看<社交网络>这部电影. faceb ...
- Android笔记——Android中visibility属性VISIBLE、INVISIBLE、GONE的区别
在Android开发中,大部分控件都有visibility这个属性,其属性有3个分别为"visible "."invisible"."gone&quo ...
- BUG级别定义标准
通过图片另存为 或者 放大浏览器倍率 查看.
- ExtJs4之TreePanel
Tree介绍 树形结构,是程序开发,不可缺少的组件之一.ExtJs中的树,功能强大美观实用.功能齐全,拖拉,排序,异步加载等等. 在ExtJs4中Tree和Grid具有相同的父类,因此Grid具有的特 ...
- Unity导出的Xcode工程目录
Classes文件夹: Unity Runtime和ObjectC代码 main.mm和AppController.mm:应用程序入口点 iPhone_Profiler.h:定义了启用内部分析器(In ...