选择显示字体大小

struts源代码阅读(commons-pool包)

struts源代码阅读(commons-pool包)

作者:蓝色忧郁

email:mariah_fan@hotmail.com


版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本声明
原文地址:
http://www.matrix.org.cn/resource/article/43/43760_struts.html
关键字:struts;commons pool


一、 xxxobjectpoolfactory
    这些类用来生成相应的xxxobjectpool,比如generickeyedobjectpoolfactory:这个类用来生成一个新的generickeyedobjectpool对象。它实际的作用只是保存创建一个generickeyedobjectpool对象所需要的配置参数。如果使用默认的配置参数生成一个generickeyedobjectpool对象,那么可以调用generickeyedobjectpoolfactory(keyedpoolableobjectfactory factory, generickeyedobjectpool.config config),其中config类里保存所有的缺省配置参数。

二、generickeyedobjectpool
    通过_poolmap来管理相应的对象链,key作为寻找不同对象链的线索。也就是说,一个generickeyedobjectpool中可以管理多个不同key的对象集合,每个集合通过_activemap用来保存各个不同的key当前的活动对象的数量(闲置对象的数量可以直接通过相应的cursorablelinkedlist的size来获取),可以通过getnumactive(object key)和getnumidle(object key)方法获取这
两个值。这个对象集合通过cursorablelinkedlist来管理。
  
   这个类里的_maxidle和_maxactive属性是针对单个key对应的cursorablelinkedlist而言的最大值,而_maxtotal属性则是对所有的key表示的对象集合的总和的最大值。_totalactive+_totalidle用来和_maxtotal的值进行对比,它们可以通过getnumactive()和getnumidle()获取。_poollist存放的值与 _poolmap 中的key值一样,注意这个对象不是没有用处的,因为cursorablelinkedlist是一个允许多个线程同步迭代的类。

1、几个内置的static类型的变量
    when_exhausted_fail 这个属性表明当对象池已经用尽时(比如说池中的对象数目已经达到了最大值),borrowobject方法应该立刻抛出nosuchelementexception异常。

    when_exhausted_block 这个属性表明当对象池已经用尽时(比如说池中的对象数目已经达到了最大值),borrowobject方法应该等待,直到对象池中有一个对象可以让它返回,或者达到了最大等待时间(default_max_wait)。

    when_exhausted_grow  这个属性表明即使在对象池已经用尽时(比如说池中的对象数目已经达到了最大值),borrowobject方法应该仍旧返回一个对象。
    default_when_exhausted_action 这个属性表明当对象池用尽的时候(比如说池中的对象数目已经达到了最大值)应该采取上面的那种策略。

    default_max_idle 和 default_max_active分别指定了在池中对大的空闲和活动对象的数目。default_max_total表明对象池允许存在的最大对象数量。

2、cursorablelinkedlist
    它实际是一个双向列表,与linkedlist的区别是:它允许多个线程执行迭代。它的实现思路是:在每次生成一个cursor时:cursorablelinkedlist.cursor cursor(int i),都会吧这个新生成的cursor对象包装到一个 weakreference 中:_cursors.add( new weakreference(cur) );在不需要的的时候需要调用cursor. close()方法取消注册。而cursor实际是一个以内嵌类的方式的实现了listiterator接口的类。weakreference 不会增加被其包装的类的引用次数,换句话说,它不会影响jvm的垃圾收集。

3、borrowobject(object key)
    这个方法用来从相应的key表示的对象集合中取出一个对象。如果对应的对象集合不存在,会创建一个这样的集合。如果集合当前没有闲置的对象可以返回,并且当前的active < _maxactive && totalactive + _totalidle < _maxtotal,那么通过keyedpoolableobjectfactory创建一个新的对象;否则就根据_whenexhaustedaction的设定执行相应的操作。要注意每次都会执行_factory.activateobject(key,pair.value)方法初始化这个对象。在返回这个对象之前,如果设定了_testonborrow标志则调用_factory.validateobject(object key, object obj)方法,如果不符合要求会抛出nosuchelementexception异常,否则返回这个对象。

4、returnobject(object key, object obj)
    这个方法用来把一个对象返回给key表示的对象集合,这个方法的执行过程与borrowobject(object key)方法相似。它会根据_testonreturn标志执行_factory.validateobject(object key, object obj)方法检查返回的对象是否合格。要注意每次都会执行 _factory.passivateobject(key, obj)方法&ldquo;消除&rdquo;这个对象。

5、过期类的回收:
    evictor 为一个内嵌类,实现自runnable接口。它每过_timebetweenevictionrunsmillis毫秒会调用一次evict()方法,在后台收集垃圾寿命超过_minevictableidletimemillis毫秒的对象。每当我们创建一个generickeyedobjectpool对象的时候,这个类会被自动创建,并且被启动。evict() 方法很简单,它首先创建一个_evictionkeycursor = _poollist.cursor()对象,然后根据key遍历每一个对象集合。
查找到过期的就会删除。

三、softreferenceobjectpool
    通过softreference进行对象的保存,这个softreference的好处是你不需要自己进行收集,它会在jvm的内存用尽时被自动回收。这种对象池的特色是:
    a、可以保存任意多个对象,不会有容量已满的情况发生。

    b、在对象池已空的时候,调用它的borrowobject方法,会自动返回新创建的实例。

    c、可以在初始化同时,在池内预先创建一定量的对象。

    d、当内存不足的时候,池中的对象可以被java虚拟机回收。


四、stackobjectpool 和 stackkeyedobjectpool
    通过一个stack对对象进行管理,要注意这个stack是继承自vector对象的。因此虽然线程安全,但是效率较低。这种对象池的特色是:
    a、可以为对象池指定一个初始的参考大小(当空间不够时会自动增长)。

    b、在对象池已空的时候,调用它的borrowobject方法,会自动返回新创建的实例。

    c、可以为对象池指定一个可保存的对象数目的上限。达到这个上限之后,再向池里送回的对象会被自动送去回收。



五、poolableobjectfactory
    pool组件利用poolableobjectfactory来照看被池化的对象。objectpool的实例在需要处理被池化的对象的产生、激活、挂起、校验和销毁工作时,就会调用跟它关联在一起的poolableobjectfactory实例的相应方法来操作。 用户需要自己实现这个接口。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons