当有人要求你在Java面试中为连接池编写(做/描绘)设计时,你通常会写什么。
您是为连接池编写代码还是描述类图。有人可以解释连接池的设计。
答案 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个结论:
Reusable
个对象不应该有状态(或者releaseReusable
方法中的状态应该'清除')
ReusablePool
通常是多线程应用程序的一部分,所有方法中的所有同步内容都应该以适当的方式实现(并且这不是一件容易的事)。