技术库 > Java

Java池化技术,对象池、连接池、线程池

技术库:tec.5lulu.com

from:tec.5lulu.com

1.对象池

   对象池技术通常是在服务器端开发使用的技术,使用该项技术的主要原因是减少从头创建每个对象的系统开销,提高系统性能。其主要做法是:创建一个对象池,将一定数量的对象缓存到这个对象池中,需要使用时直接从对象池中取出对象,使用完后将对象扔回到对象池中即可,也就是说在激活对象时,它从池中提取。在停用对象时,它放回池中,等待下一个请求。

 

2.连接池

   连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用。在实际应用开发中,特别是在WEB应用系统中,如果JSPServletEJB使用JDBC直接访问数据库中的数据,每一次数据访问请求都必须经历建立数据库连接、打开数据库、存取数据和关闭数据库连接等步骤,而连接并打开数据库是一件既消耗资源又费时的工作,如果频繁发生这种数据库操作,系统的性能必然会急剧下降,甚至会导致系统崩溃。数据库连接池技术是解决这个问题最常用的方法,在许多应用程序服务器(例如:Weblogic,WebSphere,JBoss)中,基本都提供了这项技术,无需自己编程,但是,深入了解这项技术是非常必要的。

   数据库连接池技术的思想非常简单,将数据库连接作为对象存储在一个Vector对象中,一旦数据库连接建立后,不同的数据库访问请求就可以共享这些连接,这样,通过复用这些已经建立的数据库连接,可以克服上述缺点,极大地节省系统资源和时间。

 

3.线程池

   线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。



池,就是提前创建好了东西放在池子里,你直接去池子里拿去用就行了,有现成的可用的,节省了你临时创建的时间。jdbc connection,线程thread,对象,这些东西的创建和销毁都是很消耗时间的,所以我们一般都是提前创建好很多这种创建消耗高的东西,用的时候直接去用就行。数据库连接池用的地方是:mybatis/hibernate这种sql语句操作时,临时创建connection是很消耗时间的,所以为了提高获取数据库数据的效率,在开机阶段都创建很多connection。且connection是tcp长连接的,这些数据库连接池中的connetcion可以存货很长时间。可以设置connection的max-age,数据库连接池c3p0等,都有保持connection连接存货的机制,通过connecton发送空数据包保证connection存活。

 线程池,主要是因为thread的创建和销毁是要消耗时间的,thread创建大概消耗0.02秒。java ee服务器在启动的时候,它已经创建好了很多的thread,用以来http request连接的时候,用这些创建好的thread去处理这些http连接。这些都是tomcat已经帮你做好的功能,Apache早就写好了类似的代码。

当处理Io操作时,我们习惯用线程池,因为io操作是阻塞的。所以就是在处理阻塞方法时,我们用多线程来提高效率。

 

4.常量池:字符创常量池,string那些具体final对象,下次用直接去常量池拿就行,很快 ,免去再次创建。string name="tom";

 

5.因为池子的特性是容纳多个数据,所以池子都是list等集合类,因为要一直保持住这些数据,所以list这些集合类,又要一直保存在内存中,所以很消耗资源的,并且得是静态的来保证常驻内存。

A connection pool is an object pool that contains connection objects.

"Object pooling lets you control the number of connections you use, as opposed to connection pooling, where you control the maximum number reached."

An object pool allows an application to limit the number of instances in use at any one time. If the application needs more instances than the limit, the object pool has to decide how to deal with that problem. There are a number of possible strategies:

  • return null
  • throw an exception
  • block until an instance is available
  • increase the size of the pool

A connection pool is an object pool, so it has exactly the same decision to make.

A specific implementation of an object pool (or connection pool) could use any one of these strategies, or several in combination.

In my opinion the statement as quoted is misleading unless it is talking about specific implementations.

A Simple Object Pool Example

A pool has some configuration parameters. A simple pool might have a minimum_size and a maximum_size. When the pool is first available for use it will contain minimum_size objects. As clients ask for these objects, the pool will contain fewer unallocated objects. This number can also increase when clients return objects to the pool.

At some point the pool might reach a state where it has no unallocated objects, but one or more clients requests an object. At this point, as long as the pool hasn't reached maximum_size, it can create some new objects and add them to the pool. It can now return objects to the clients.

If the pool has reached maximum_size, it cannot increase the size of the pool, so it has to deal with the clients in a different way - let's say that it throws an ObjectPoolExhausted exception.

A little while later, some clients return objects to the pool, and it can carry on as usual until it runs out of objects again.


Java池化技术,对象池、连接池线程池


标签: 线程本文链接 http://tec.5lulu.com/detail/110dyn2eheg71854c.html

我来评分 :6.1
0

转载注明:转自5lulu技术库

本站遵循:署名-非商业性使用-禁止演绎 3.0 共享协议

www.5lulu.com