通过一个小小的demo带你认识Pool2

开发 开发工具
本文先回顾Java泛型知识,然后再认识Apache Commons Pool2,拆解一下Pool2的demo。

一、Java泛型

Apache Commons Pool2源码中用到了很多泛型的知识,这里我们回顾一下泛型,以便于我们更好的阅读后续的源码。

1. 什么是泛型?

简而言之,泛型可以在定义类,接口和方法时使类型(类和接口)成为参数。类似在方法声明中使用的形式参数。

2. Java泛型标记符

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • ? - 表示不确定的Java类型
  • S、U、V - 2nd、3rd、4th types

3. Object与这些标记符代表的Java类型有啥区别呢?

Object是所有类的根类,任何类的对象都可以设置给该Object引用变量,使用的时候可能需要类型强制转换,但是用使用了泛型T、E等这些标识符后,在实际用之前类型就已经确定了,不需要再进行类型强制转换。

4. 官方参考

可以肯定的说,上面介绍的知识,在论坛和博客中都可以搜索到,但是大家有没有想过,那些发布博客的人从哪里获取这些泛型的知识呢?书是一个渠道,更重要的是官方的文档参考,如果英文不错我强烈建议大家看官网的原版说明,从这些官方的技术文档中,你可以获得很多意想不到的知识。http://docs.oracle.com/javase/tutorial/java/generics/index.html这个地址是Oracle官网关于Java泛型的说明,建议大家有空阅读阅读。

二、初识Pool2

回顾了Java泛型,我们来认识一下Apache Commons Pool2吧,既然是先认识一下,与了解一个人是一样的,就是多接触,自然就会加深印象。对于代码我们怎么接触呢?那自然是demo了,一个小小的demo可以帮助我们了解,加深印象。我们来拆解一下Pool2的demo吧。

1. 准备demo环境

准备demo环境

2. 从池中拿到StringBuffer,用完后放回池中

从池中拿到StringBuffer,用完后放回池中

PS:一般情况下第14行代码,需要初始化一个buf=new StringBuffer(),而这里赋值为null,在第16行处直接从pool中获取StringBuffer,不再初始化,使用完毕后在第29行放回pool,这里把StringBuffer当成pool中的一种资源来使用,当然现实中使用StringBuffer直接初始化即可,不需要使用pool,可以展开想象,如果把StringBuffer换成jdbc连接,那不就是jdbc连接池了吗?

3. 定义StringBufferFactory,根据需要覆盖池中对象的生命周期方法

定义StringBufferFactory

PS:PooledObjectFactory接口定义了池中对象的生命周期方法。 实现PoolableObjectFactory的最简单的方法是扩展BasePooledObjectFactory。StringBufferFactory是一个BasePooledObjectFactory实现,用来创建如上要用的StringBuffer对象。

4. 结合并测试

PS:我们传递StringBufferFactory给GenericObjectPool这个工厂来实例化我们的ReaderUtil。

从这个简单的demo可知,Pool2充当资源池,来管理StringBuffer这种对象资源。

【本文为51CTO专栏作者“朱国立”的原创稿件,转载请通过作者微信公众号“开发者圆桌”获取联系和授权】

戳这里,看该作者更多好文

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2015-10-16 10:19:01

2018-09-27 10:33:30

正则表达式CPUJava

2020-01-23 15:40:00

运维架构技术

2024-04-17 08:18:22

MyBatis批量插入SQL

2022-08-15 09:23:07

IP耦合

2022-09-05 19:48:01

日志软件

2017-11-27 06:30:25

IP耦合架构

2021-07-29 07:55:19

Demo 工作池

2015-03-30 12:20:07

DemoStoryboard

2011-03-07 14:52:55

Websense数据泄露防护

2024-01-07 19:48:12

2017-11-27 08:30:50

公共库耦合架构

2021-04-14 07:33:02

Java函数式断言

2022-01-14 19:00:37

微信微信红包移动应用

2021-06-10 09:00:33

单例模式数据库

2021-02-20 11:34:43

Linux内核指针

2020-03-26 17:00:53

HashMapputJava

2020-06-23 10:03:33

版本控制项目

2021-07-02 07:18:19

Goresults通道类型

2010-09-29 15:15:15

DHCP中继
点赞
收藏

51CTO技术栈公众号