知识大全 Java对象池示例
Posted 知
篇首语:知识为进步之母,而进步又为富强之源泉。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java对象池示例相关的知识,希望对你有一定的参考价值。
Java对象池示例 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
对象池使用的基本思路是 将用过的对象保存起来 等下一次需要这种对象的时候 再拿出来重复使用 从而在一定程度上减少频繁创建对象所造成的开销 并非所有对象都适合拿来池化――因为维护对象池也要造成一定开销 对生成时开销不大的对象进行池化 反而可能会出现 维护对象池的开销 大于 生成新对象的开销 从而使性能降低的情况 但是对于生成时开销可观的对象 池化技术就是提高性能的有效策略了 下面是构建对象池的一个例子 public class ObjectPool private int numObjects = ; // 对象池的大小 private int maxObjects = ; // 对象池最大的大小 private Vector objects = null; //存放对象池中对象的向量( PooledObject类型) public ObjectPool() /*** 创建一个对象池***/ public synchronized void createPool() // 确保对象池没有创建 如果创建了 保存对象的向量 objects 不会为空 if (objects != null) return; // 如果己经创建 则返回 // 创建保存对象的向量 初始时有 个元素 objects = new Vector() // 根据 numObjects 中设置的值 循环创建指定数目的对象 for (int x = ; x < numObjects; x++) if ((objects size() == )&&this objects size() <this maxObjects) Object obj = new Obj() objects addElement(new PooledObject(obj)) public synchronized Object getObject() // 确保对象池己被创建 if (objects == null) return null; // 对象池还没创建 则返回 null Object conn = getFreeObject() // 获得一个可用的对象 // 如果目前没有可以使用的对象 即所有的对象都在使用中 while (conn == null) wait( ) conn = getFreeObject() // 重新再试 直到获得可用的对象 如果 // getFreeObject() 返回的为 null 则表明创建一批对象后也不可获得可用对象 return conn;// 返回获得的可用的对象 /** * 本函数从对象池对象 objects 中返回一个可用的的对象 如果 * 当前没有可用的对象 则创建几个对象 并放入对象池中 * 如果创建后 所有的对象都在使用中 则返回 null */ private Object getFreeObject() // 从对象池中获得一个可用的对象 Object obj = findFreeObject() if (obj == null) createObjects(incrementalObjects) //如果目前对象池中没有可用的对象 创建一些对象 // 重新从池中查找是否有可用对象 obj = findFreeObject() // 如果创建对象后仍获得不到可用的对象 则返回 null if (obj == null) return null; return obj; /** * 查找对象池中所有的对象 查找一个可用的对象 * 如果没有可用的对象 返回 null */ private Object findFreeObject() Object obj = null; PooledObject pObj = null; // 获得对象池向量中所有的对象 Enumeration enumerate = objects elements() // 遍历所有的对象 看是否有可用的对象 while (enumerate hasMoreElements()) pObj = (PooledObject) enumerate nextElement() // 如果此对象不忙 则获得它的对象并把它设为忙 if (!pObj isBusy()) obj = pObj getObject() pObj setBusy(true) return obj;// 返回找到到的可用对象 /** * 此函数返回一个对象到对象池中 并把此对象置为空闲 * 所有使用对象池获得的对象均应在不使用此对象时返回它 */ public void returnObject(Object obj) // 确保对象池存在 如果对象没有创建(不存在) 直接返回 if (objects == null) return; PooledObject pObj = null; Enumeration enumerate = objects elements() // 遍历对象池中的所有对象 找到这个要返回的对象对象 while (enumerate hasMoreElements()) pObj = (PooledObject) enumerate nextElement() // 先找到对象池中的要返回的对象对象 if (obj == pObj getObject()) // 找到了 设置此对象为空闲状态 pObj setBusy(false) break; /** * 关闭对象池中所有的对象 并清空对象池 */ public synchronized void closeObjectPool() // 确保对象池存在 如果不存在 返回 if (objects == null) return; PooledObject pObj = null; Enumeration enumerate = objects elements() while (enumerate hasMoreElements()) pObj = (PooledObject) enumerate nextElement() // 如果忙 等 秒 if (pObj isBusy()) wait( ) // 等 秒 // 从对象池向量中删除它 objects removeElement(pObj) // 置对象池为空 objects = null; /** * 使程序等待给定的毫秒数 */ private void wait(int mSeconds) try Thread sleep(mSeconds) catch (InterruptedException e) /** * 内部使用的用于保存对象池中对象的类 * 此类中有两个成员 一个是对象 另一个是指示此对象是否正在使用的标志 */ class PooledObject Object objection = null;// 对象 boolean busy = false; // 此对象是否正在使用的标志 默认没有正在使用 // 构造函数 根据一个 Object 构告一个 PooledObject 对象 public PooledObject(Object objection) this objection = objection; // 返回此对象中的对象 public Object getObject() return objection; // 设置此对象的 对象 public void setObject(Object objection) this objection = objection; // 获得对象对象是否忙 public boolean isBusy() return busy; // 设置对象的对象正在忙 public void setBusy(boolean busy) this busy = busy; 测试类 代码如下 public class ObjectPoolTest public static void main(String[] args) throws Exception ObjectPool objPool = new ObjectPool() objPool createPool() Object obj = objPool getObject() returnObject(obj) objPool closeObjectPool() cha138/Article/program/Java/hx/201311/25600相关参考
Java程序性能优化-对象复用“池”(5) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
Java程序性能优化-对象复用“池”(1) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nb
Java对象池技术的原理及其实现 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 摘要本文在分析对
Java程序性能优化-对象复用“池”(3)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-对象复用“池”(4)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-对象复用“池”(4)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-对象复用“池”(2)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-对象复用“池”(2)[1] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java程序性能优化-对象复用“池”(3)[2] 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
Java代码构建一个线程池 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本示例程序由三个类构成