知识大全 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)

Java程序性能优化-对象复用“池”(5)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &nb

知识大全 Java程序性能优化-对象复用“池”(1)

Java程序性能优化-对象复用“池”(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &nb

知识大全 Java对象池技术的原理及其实现

Java对象池技术的原理及其实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  摘要本文在分析对

知识大全 Java程序性能优化-对象复用“池”(3)[1]

Java程序性能优化-对象复用“池”(3)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java程序性能优化-对象复用“池”(4)[2]

Java程序性能优化-对象复用“池”(4)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java程序性能优化-对象复用“池”(4)[1]

Java程序性能优化-对象复用“池”(4)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java程序性能优化-对象复用“池”(2)[2]

Java程序性能优化-对象复用“池”(2)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java程序性能优化-对象复用“池”(2)[1]

Java程序性能优化-对象复用“池”(2)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java程序性能优化-对象复用“池”(3)[2]

Java程序性能优化-对象复用“池”(3)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 Java代码构建一个线程池

Java代码构建一个线程池  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本示例程序由三个类构成