ConnectionPool的设计

New*_*eer 1 java design-patterns connection-pooling

当有人要求你在Java面试中为连接池编写(做/描绘)设计时,你通常会写什么.

您是否为连接池编写代码或者是否描述了类图.有人可以解释一下连接池的设计.

Rom*_*man 5

对象池模式(和连接池是它的一个特例)在Mark Grand的'Patterns in Java中有很大的描述.卷.1.

这是一个基本的类图(来自谷歌图片):

alt text http://img13.imageshack.us/img13/8448/poolz.png

主要思想:Client不应该Reusable自己创造对象.而不是他应该使用ReusablePool.要得到Reusable他应该打电话的对象acquireReusable.当他不再需要Reusable物体时,他应该通过呼叫把它放回去releaseReusable.

ReusablePool包含Reusable对象列表.当Client要求时Reusable,池寻找现有的免费Reusable.如果Reusable获取了所有对象,那么如果列表大小较小,则再maxSize ReusablePool创建一个Reusable对象.当列表大小等于maxSize池时不会创建新的Reusable.而不是等到其他客户给他回任何Reusable对象.

从这个描述中你可以得出2个结论:

  1. Reusable对象不应该有一个状态(或者它们的状态应该在releaseReusable方法中被"清除" )

  2. ReusablePool 通常是多线程应用程序的一部分,并且所有方法中的所有同步内容都应该以适当的方式实现(并且这不是一件容易的事).