paip.提高品质—-数据库连接池以及线程池以及对象池

paip.提高品质—-数据库连接池以及线程池以及对象池

目录:数据库连接池c三po,线程池ExecutorService:Jakartacommons-pool对象池

作者Attilax  艾龙,  EMAIL:1466519819@qq.com
来源:attilax的专栏
地址:http://blog.csdn.net/attilax

//////////为啥要动用数据库连接池
创立连接是八个讨厌的位移,每便都得成本0.0伍s~一s的光阴,而且系统还要分配内存能源。
对于共享财富,有四个很盛名的设计格局:能源池 (Resource Pool)。

/////////////连接池主要工作方式

三. 当连接池中的连接都曾经用完,而有新的接连请求到来时会发生哪些?
当连接池已经高达它的最达累斯萨拉姆接数目时,有新的总是请求到来时,新的接连请求将放置到延续队列中。当有一而再释放给连接池时,连接池将新释放的三番五次分配给在队列中排队的连天请求。你能够调用close和dispose将连接归还给连接池。
四. 本身应当如何允许连接池?
对于.NET应用程序而言,暗中认可为允许连接池。(那意味你能够不要为那件事情做任何的工作)当然,如若你能够在SQLConnection对象的延续字符串中追加Pooling=true;确定保证您的应用程序允许连接池的利用。
五. 作者应当怎么样禁止连接池?
ADO.NET默许为允许数据库连接池,如果您期望取缔连接池,能够应用如下的主意:
1) 使用SQLConnection对象时,往连接字符串到场如下内容:Pooling=False;
二) 使用OLEDBConnection对象时,往连接字符串出席如下内容:OLE DB
Services=-四;

当应用程序向连接池请求的连接数超越最利兹接数量时,那一个请求将被参与到等候队列

///////Java连接池
在Java中开源的数据库连接池有以下二种 :
1, C三P0
C三P0是叁个开放源代码的JDBC连接池,它在lib目录中与Hibernate[1]共同公布,包括了达成jdbc叁和jdbc贰扩张规范表明的Connection
和Statement 池的DataSources 对象。
二,Proxool 那是三个Java SQL
Driver驱动程序,提供了对您挑选的其余类型的驱动程序的连接池封装。可以格外简单的移植到现存的代码中。完全可配备。快捷,成熟,健壮。可以透明地为您留存的JDBC驱动程序扩大连接池功用。
三,Jakarta DBCP
DBCP是3个正视Jakartacommons-pool对象池机制的数据库连接池.DBCP能够一向的在应用程序中利用。

////////////11,Druid,但它不仅是三个数据库连接池,它还富含三个ProxyDriver,一层层内置的JDBC组件库,二个SQL
Parser。
支撑具备JDBC包容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL
Server、H二等等。
Druid针对Oracle和MySql做了尤其优化,比如Oracle的PS
Cache内存占用优化,MySql的ping检查测试优化。
Druid提供了MySql、Oracle、Postgresql、SQL-九二的SQL的完全扶助,那是三个手写的高品质SQL
Parser,辅助Visitor情势,使得分析SQL的肤浅语法树很有益。
简言之SQL语句用时十纳秒以内,复杂SQL用时30阿秒。
透过Druid提供的SQL
Parser能够在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter便是通过Druid的SQL
Parser分析语义完成的

////////线程池
Java里面线程池的甲级接口是Executor,但是严俊意义上讲Executor并不是一个线程池,而只是五个履行线程的工具。真正的线程池接口是ExecutorService。上边那张图完全描述了线程池的类种类布局。
标志一下比较关键的类:
ExecutorService:     真正的线程池接口。
ScheduledExecutorService   
 能和Timer/提姆erTask类似,消除那些需求职分重新执行的难点。
ThreadPoolExecutor     ExecutorService的默许实现。
ScheduledThreadPoolExecutor   
 继承ThreadPoolExecutor的ScheduledExecutor瑟维斯接口达成,周期性任务调度的类实现。

要配备3个线程池是比较复杂的,特别是对此线程池的原理不是很明亮的情况下,很有十分的大希望布署的线程池不是较优的,由此在Executors类里面提供了有个别静态工厂,生成1些常用的线程池。

   
newSingleThreadExecutor:创设二个单线程的线程池。这几个线程池只有多少个线程在干活,也等于一定于单线程串行执行全数职责。就算这一个唯一的线程因为这几个停止,那么会有3个新的线程来替代它。此线程池保证全数职分的推行种种遵照职责的交由顺序执行。
   
newFixedThreadPool:创制固定大小的线程池。每便提交2个职务就创立三个线程,直到线程达到线程池的最大尺寸。线程池的深浅1旦达到规定的标准最大值就会维持不变,倘若有个别线程因为执行很是而甘休,那么线程池会补充1个新线程。
   
newCachedThreadPool:创立二个可缓存的线程池。借使线程池的大小超越了处理职责所供给的线程,那么就会回收部分有空(60秒不实施职责)的线程,当职务数扩充时,此线程池又能够智能的丰硕新线程来处理职责。此线程池不会对线程池大小做限定,线程池大小完全依靠于操作系统(大概说JVM)能够创制的最大线程大小。
   
newScheduledThreadPool:创设二个轻重缓急无限的线程池。此线程池帮助定时以及周期性执行职责的需求。
   
newSingleThreadExecutor:创立1个单线程的线程池。此线程池支持定时以及周期性执行职分的须要。

//////////对象池
Jakartacommons-pool对象池
    
    
参考:
数据库连接池C3P0学习 – haoran-十 – ITeye技术网址.htm
c三p0使用数据库连接池示例_newflyaaa的空间_百度空间.htm

相关文章