ConnectionPool的设计

时间:2010-03-03 11:46:40

标签: java design-patterns connection-pooling

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

您是为连接池编写代码还是描述类图。有人可以解释连接池的设计。

1 个答案:

答案 0 :(得分:5)

对象池模式(以及连接池是它的一个特例)在Mark Grand的“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通常是多线程应用程序的一部分,所有方法中的所有同步内容都应该以适当的方式实现(并且这不是一件容易的事)。