技术开发 频道

用Java实现多线程服务器程序

  由于通用对象池的管理开销比较大,某种程度上抵消了重用对象所带来的大部分优势。为解决该问题,可以采用专用对象池的方法。即对象池所池化对象的Class类型不是动态指定的,而是预先就已指定。这样,它在实现上也会较通用对象池简单些,可以不要ObjectPoolFactory和PoolableObjectFactory类,而将它们的功能直接融合到ObjectPool类,具体如下(假定被池化对象的Class类型仍为StringBuffer,而用省略号表示的地方,表示代码同通用对象池的实现):

1public class ObjectPool {
2 private ParameterObject paraObj;//该对象池的属性参数对象
3 private int currentNum = 0; //该对象池当前已创建的对象数目
4 private StringBuffer currentObj;//该对象池当前可以借出的对象
5 private Vector pool;//用于存放对象的池
6 public ObjectPool(ParameterObject paraObj) {
7  this.paraObj = paraObj;
8  pool = new Vector();
9 }
10 public StringBuffer getObject() {
11  if (pool.size() <= paraObj.getMinCount()) {
12   if (currentNum <= paraObj.getMaxCount()) {
13    currentObj = new StringBuffer();
14    currentNum++;
15   }
16   . . .
17  }
18  return currentObj;
19 }
20 public void returnObject(Object obj) {
21  // 确保对象具有正确的类型
22  if (StringBuffer.isInstance(obj)) {
23   . . .
24  }
25 }

 

  结束语

  恰当地使用对象池技术,能有效地改善应用程序的性能。目前,对象池技术已得到广泛的应用,如对于网络和数据库连接这类重量级的对象,一般都会采用对象池技术。但在使用对象池技术时也要注意如下问题:

  ·并非任何情况下都适合采用对象池技术。基本上,只在重复生成某种对象的操作成为影响性能的关键因素的时候,才适合采用对象池技术。而如果进行池化所能带来的性能提高并不重要的话,还是不采用对象池化技术为佳,以保持代码的简明。

  ·要根据具体情况正确选择对象池的实现方式。如果是创建一个公用的对象池技术实现包,或需要在程序中动态指定所池化对象的Class类型时,才选择通用对象池。而大部分情况下,采用专用对象池就可以了。

0
相关文章