这篇文章主要介绍了JavaGenericObjectPool对象池化技术怎么使用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaGenericObjectPool对象池化技术怎么使用文章都会有所收获,下面我们一起来看看吧。Java BasePooledObjectFactory 对象池化技术通常一个对象创建、销毁非常耗时的时候,我们不会频繁的创建和销毁它,而是考虑复用。复用对象的一种做法就是对象池,将创建好的对象放入池中维护起来,下次再用的时候直接拿池中已经创建好的对象继续用,这就是池化的思想。Apache Commons Pool是一个对象池的框架,他提供了一整套用于实现对象池化的API。它提供了三种对象池:GenericKeyedObjectPool,SoftReferenceObjectPool和GenericObjectPool,其中GenericObjectPool是我们最常用的对象池,内部实现也最复杂。GenericObjectPool 是一个通用对象池框架,我们可以借助它实现一个健壮的对象池,UML图如下所示:GenericObjectPool 实现了ObjectPool接口,而ObjectPool就是对象池的核心接口,它定义了一个对象池应该实现的行为。Java BasePooledObjectFactory 对象池化技术使用GenericObjectPool
只需要创建一个对象工厂类,继承BasePooledObjectFactory
并重写它的create()
和destroyObject()
。
如下文中的:Sftp免费云主机域名Pool.java
GenericObjectPoolConfig
是封装GenericObject
池配置的简单“结构”,此类不是线程安全的;它仅用于提供创建池时使用的属性。大多数情况,可以使用GenericObjectPoolConfig
提供的默认参数就可以满足日常的需求。工作原理流程构造方法
当我们执行构造方法时,主要工作就是创建了一个存储对象的LinkedList类型容器,也就是概念意义上的“池”从对象池中获取对象
获取池中的对象是通过borrowObject()命令,源码比较复杂,简单而言就是去LinkedList中获取一个对象,如果不存在的话,要调用构造方法中第一个参数Factory工厂类的makeObject()方法去创建一个对象再获取,获取到对象后要调用validateObject方法判断该对象是否是可用的,如果是可用的才拿去使用。LinkedList容器减一归还对象到线程池
简单而言就是先调用validateObject方法判断该对象是否是可用的,如果可用则归还到池中,LinkedList容器加一,如果是不可以的则调用destroyObject方法进行销毁上面三步就是最简单的流程,由于取和还的流程步骤都在borrowObject和returnObject方法中固定的,所以我们只要重写Factory工厂类的makeObject()和validateObject以及destroyObject方法即可实现最简单的池的管理控制,通过构造方法传入该Factory工厂类对象则可以创建最简单的对象池管理类。这算是比较好的解耦设计模式,借和还的流程如下图所示:application.yamlSftpPoolException.javaNotethatthedetailmessageassociatedwith
*{@codecause}isnotautomaticallyincorporatedin
*thisruntimeexception’sdetailmessage.
*
*@parammessagethedetailmessage(whichissavedforlaterretrieval
*bythe{@link#getMessage()}method).
*@paramcausethecause(whichissavedforlaterretrievalbythe
*{@link#getCause()}method).(Anullvalueis
*permitted,andindicatesthatthecauseisnonexistentor
*unknown.)
*@since1.4
*/
publicSftpPoolException(Stringmessage,Throwablecause){
super(message,cause);
}
/**
*Constructsanewruntimeexceptionwiththespecifiedcauseanda
*detailmessageof(cause==null?null:cause.toString())
*(whichtypicallycontainstheclassanddetailmessageof
*cause).Thisconstructorisusefulforruntimeexceptions
*thatarelittlemorethanwrappersforotherthrowables.
*
*@paramcausethecause(whichissavedforlaterretrievalbythe
*{@link#getCause()}method).(Anullvalueis
*permitted,andindicatesthatthecauseisnonexistentor
*unknown.)
*@since1.4
*/
publicSftpPoolException(Throwablecause){
super(cause);
}
/**
*Constructsanewruntimeexceptionwiththespecifieddetail
*message,cause,suppressionenabledordisabled,andwritable
*stacktraceenabledordisabled.
*
*@parammessagethedetailmessage.
*@paramcausethecause.(A{@codenull}valueispermitted,
*andindicatesthatthecauseisnonexistentorunknown.)
*@paramenableSuppressionwhetherornotsuppressionisenabled
*ordisabled
*@paramwritableStackTracewhetherornotthestacktraceshould
*bewritable
*@since1.7
*/
publicSftpPoolException(Stringmessage,Throwablecause,booleanenableSuppression,booleanwritableStackTrace){
super(message,cause,enableSuppression,writableStackTrace);
}
}SftpConfig.javaSftpProperties.javaSftpFactory.javaSftpPool.javaByteUtil.javaSftpTest.java关于“JavaGenericObjectPool对象池化技术怎么使用”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“JavaGenericObjectPool对象池化技术怎么使用”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注百云主机行业资讯频道。
这篇文章主要介绍“Python如何实现环形链表”,在日常操作中,相信很多人在Python如何实现环形链表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python如何实现环形链表”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。