zoukankan      html  css  js  c++  java
  • Java 基础

    对象池  优点:  防止过多的创建对象合理利用对象, 缺点: 会有线程阻塞

    Demo 测试代码

    package com.cjcx.pay.obj;
    
    
    import java.util.Enumeration;
    import java.util.Vector;
    import java.util.concurrent.Callable;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.FutureTask;
    
    /**
     * 对象池
     */
    public class ObjectPool {
    
        private int min = 10;
    
        private int max = 50;
    
        private Vector objects = null;
    
        public synchronized void createPool() {
            if (objects != null) {
                return;
            }
    
            objects = new Vector();
            for (int i = 0; i < min; i++) {
                objects.addElement(new PooledObject(new Obj()));
            }
        }
    
    
        /**
         * 获取池对象
         *
         * @return
         */
        public synchronized Object getObject() {
            Object conn = getFreeObject();
    
            while (conn == null) {
                wait(250);
                conn = getFreeObject();
            }
            return conn;
        }
    
    
        private Object getFreeObject() {
            Object obj = findFreeObject();
    
            if (obj == null) {
                synchronized (this) {
                    int cnt = getBusyCount();
                    if (cnt == objects.size() && objects.size() < max) {
                        objects.addElement(new PooledObject(new Obj()));
                        obj = findFreeObject();
                    }
                }
            }
            return obj;
        }
    
    
        /**
         * 遍历Vector池,获取可用对象
         *
         * @return
         */
        private Object findFreeObject() {
            Object obj = null;
            PooledObject pooledObject = null;
    
            Enumeration enumeration = objects.elements();
            while (enumeration.hasMoreElements()) {
                pooledObject = (PooledObject) enumeration.nextElement();
    
                if (!pooledObject.isBusy()) {
                    obj = pooledObject.getObject();
                    pooledObject.setBusy(true);
                    break;
                }
            }
            return obj;
        }
    
        private int getBusyCount() {
            int cnt = 0;
            PooledObject pooledObject = null;
            Enumeration enumeration = objects.elements();
            while (enumeration.hasMoreElements()) {
                pooledObject = (PooledObject) enumeration.nextElement();
    
                if (pooledObject.isBusy()) {
                    cnt++;
                }
            }
            return cnt;
        }
    
    
        /**
         * 此函数返回一个对象到对象池中,并把此对象置为空闲。
         * 所有使用对象池获得的对象均应在不使用此对象时返回它。
         */
    
        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;
                }
            }
        }
    
        /**
         * 使程序等待给定的毫秒数
         */
        private void wait(int mSeconds) {
            try {
                Thread.sleep(mSeconds);
            } catch (InterruptedException e) {
            }
        }
    
    
        /**
         * 关闭对象池中所有的对象,并清空对象池。
         */
        public synchronized void closeObjectPool() {
            // 确保对象池存在,如果不存在,返回
            if (objects == null) {
                return;
            }
    
            PooledObject pObj = null;
            Enumeration enumerate = objects.elements();
            while (enumerate.hasMoreElements()) {
                pObj = (PooledObject) enumerate.nextElement();
                // 如果忙,等 5 秒
                if (pObj.isBusy()) {
                    wait(5000); // 等 5 秒
                }
                // 从对象池向量中删除它
                objects.removeElement(pObj);
            }
            // 置对象池为空
            objects = null;
        }
    
    
        public Vector getObjects() {
            return objects;
        }
    
        public static void main(String[] args) {
            ObjectPool pool = new ObjectPool();
            System.out.println("创建对象池");
            pool.createPool();
    
            //创建固定线程池 为面延迟回收对象
            ExecutorService executor = Executors.newFixedThreadPool(3);
    
            for (int i = 0; i < 100; i++) {
                System.out.println(" 对象池 对象数量: " + pool.getObjects().size());
    
                Obj pObj = (Obj) pool.getObject();
                pObj.syaHello(i);
    
                //延迟20ms 回收对象
                FutureTask<Void> future =
                        new FutureTask<Void>(new Callable<Void>() {
                            @Override
                            public Void call() throws Exception {
                                Thread.sleep(20);
                                pool.returnObject(pObj);
                                return null;
                            }
                        });
                executor.execute(future);
            }
    
            System.out.println("清空对象池");
            pool.closeObjectPool();
          //关闭线程池
            executor.shutdown();
        }
    
    
        /**
         * 池对象
         */
        class PooledObject {
            Object object = null;
            boolean busy = false;
    
            public PooledObject() {
            }
    
            public PooledObject(Object object) {
                this.object = object;
            }
    
            public Object getObject() {
                return object;
            }
    
            public void setObject(Object object) {
                this.object = object;
            }
    
            public boolean isBusy() {
                return busy;
            }
    
            public void setBusy(boolean busy) {
                this.busy = busy;
            }
        }
    
    
        /**
         * 对象 待处理对象
         */
        class Obj {
    
            public void syaHello(int i) {
                System.out.println(this.toString() + " ==> hello :" + i);
                ;
            }
        }
    
    }

    运行main方法效果如下;

    "C:Program FilesJavajdk1.8.0_141injava" "-javaagent:C:Program FilesJetBrainsIntelliJ IDEA 2017.2libidea_rt.jar=61770:C:Program FilesJetBrainsIntelliJ IDEA 2017.2in" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.8.0_141jrelibcharsets.jar;C:Program FilesJavajdk1.8.0_141jrelibdeploy.jar;C:Program FilesJavajdk1.8.0_141jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.8.0_141jrelibextcldrdata.jar;C:Program FilesJavajdk1.8.0_141jrelibextdnsns.jar;C:Program FilesJavajdk1.8.0_141jrelibextjaccess.jar;C:Program FilesJavajdk1.8.0_141jrelibextjfxrt.jar;C:Program FilesJavajdk1.8.0_141jrelibextlocaledata.jar;C:Program FilesJavajdk1.8.0_141jrelibext
    ashorn.jar;C:Program FilesJavajdk1.8.0_141jrelibextsunec.jar;C:Program FilesJavajdk1.8.0_141jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.8.0_141jrelibextsunmscapi.jar;C:Program FilesJavajdk1.8.0_141jrelibextsunpkcs11.jar;C:Program FilesJavajdk1.8.0_141jrelibextzipfs.jar;C:Program FilesJavajdk1.8.0_141jrelibjavaws.jar;C:Program FilesJavajdk1.8.0_141jrelibjce.jar;C:Program FilesJavajdk1.8.0_141jrelibjfr.jar;C:Program FilesJavajdk1.8.0_141jrelibjfxswt.jar;C:Program FilesJavajdk1.8.0_141jrelibjsse.jar;C:Program FilesJavajdk1.8.0_141jrelibmanagement-agent.jar;C:Program FilesJavajdk1.8.0_141jrelibplugin.jar;C:Program FilesJavajdk1.8.0_141jrelib
    esources.jar;C:Program FilesJavajdk1.8.0_141jrelib
    t.jar;C:Usersguoworkspaceideacloud-devmall-pay	arget	est-classes;C:Usersguoworkspaceideacloud-devmall-pay	argetclasses;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot-starter-thymeleaf1.5.12.RELEASEspring-boot-starter-thymeleaf-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot-starter1.5.12.RELEASEspring-boot-starter-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot1.5.12.RELEASEspring-boot-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot-autoconfigure1.5.12.RELEASEspring-boot-autoconfigure-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot-starter-logging1.5.12.RELEASEspring-boot-starter-logging-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositorychqoslogbacklogback-classic1.1.11logback-classic-1.1.11.jar;C:Usersguo.m2
    epositorychqoslogbacklogback-core1.1.11logback-core-1.1.11.jar;C:Usersguo.m2
    epositoryorgslf4jjcl-over-slf4j1.7.25jcl-over-slf4j-1.7.25.jar;C:Usersguo.m2
    epositoryorgslf4jjul-to-slf4j1.7.25jul-to-slf4j-1.7.25.jar;C:Usersguo.m2
    epositoryorgslf4jlog4j-over-slf4j1.7.25log4j-over-slf4j-1.7.25.jar;C:Usersguo.m2
    epositoryorgyamlsnakeyaml1.17snakeyaml-1.17.jar;C:Usersguo.m2
    epositoryorg	hymeleaf	hymeleaf-spring43.0.2.RELEASE	hymeleaf-spring4-3.0.2.RELEASE.jar;C:Usersguo.m2
    epositoryorg	hymeleaf	hymeleaf3.0.2.RELEASE	hymeleaf-3.0.2.RELEASE.jar;C:Usersguo.m2
    epositoryorgattoparserattoparser2.0.1.RELEASEattoparser-2.0.1.RELEASE.jar;C:Usersguo.m2
    epositoryorgunbescapeunbescape1.1.4.RELEASEunbescape-1.1.4.RELEASE.jar;C:Usersguo.m2
    epositoryorgslf4jslf4j-api1.7.25slf4j-api-1.7.25.jar;C:Usersguo.m2
    epository
    z
    etultraq	hymeleaf	hymeleaf-layout-dialect2.1.1	hymeleaf-layout-dialect-2.1.1.jar;C:Usersguo.m2
    epositoryorgcodehausgroovygroovy2.4.15groovy-2.4.15.jar;C:Usersguo.m2
    epository
    z
    etultraq	hymeleaf	hymeleaf-expression-processor1.1.2	hymeleaf-expression-processor-1.1.2.jar;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot-starter-web1.5.12.RELEASEspring-boot-starter-web-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot-starter-tomcat1.5.12.RELEASEspring-boot-starter-tomcat-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositoryorgapache	omcatembed	omcat-embed-core8.5.29	omcat-embed-core-8.5.29.jar;C:Usersguo.m2
    epositoryorgapache	omcat	omcat-annotations-api8.5.29	omcat-annotations-api-8.5.29.jar;C:Usersguo.m2
    epositoryorgapache	omcatembed	omcat-embed-el8.5.29	omcat-embed-el-8.5.29.jar;C:Usersguo.m2
    epositoryorgapache	omcatembed	omcat-embed-websocket8.5.29	omcat-embed-websocket-8.5.29.jar;C:Usersguo.m2
    epositoryorghibernatehibernate-validator5.3.6.Finalhibernate-validator-5.3.6.Final.jar;C:Usersguo.m2
    epositoryjavaxvalidationvalidation-api1.1.0.Finalvalidation-api-1.1.0.Final.jar;C:Usersguo.m2
    epositoryorgjbossloggingjboss-logging3.3.2.Finaljboss-logging-3.3.2.Final.jar;C:Usersguo.m2
    epositorycomfasterxmlclassmate1.3.4classmate-1.3.4.jar;C:Usersguo.m2
    epositoryorgspringframeworkspring-web4.3.16.RELEASEspring-web-4.3.16.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkspring-beans4.3.16.RELEASEspring-beans-4.3.16.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkspring-context4.3.16.RELEASEspring-context-4.3.16.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkspring-webmvc4.3.16.RELEASEspring-webmvc-4.3.16.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkspring-expression4.3.16.RELEASEspring-expression-4.3.16.RELEASE.jar;C:Usersguo.m2
    epositorymysqlmysql-connector-java5.1.46mysql-connector-java-5.1.46.jar;C:Usersguo.m2
    epositoryorgprojectlomboklombok1.16.20lombok-1.16.20.jar;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot-starter-test1.5.12.RELEASEspring-boot-starter-test-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot-test1.5.12.RELEASEspring-boot-test-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot-test-autoconfigure1.5.12.RELEASEspring-boot-test-autoconfigure-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositorycomjaywayjsonpathjson-path2.2.0json-path-2.2.0.jar;C:Usersguo.m2
    epository
    etminidevjson-smart2.2.1json-smart-2.2.1.jar;C:Usersguo.m2
    epository
    etminidevaccessors-smart1.1accessors-smart-1.1.jar;C:Usersguo.m2
    epositoryorgow2asmasm5.0.3asm-5.0.3.jar;C:Usersguo.m2
    epositoryjunitjunit4.12junit-4.12.jar;C:Usersguo.m2
    epositoryorgassertjassertj-core2.6.0assertj-core-2.6.0.jar;C:Usersguo.m2
    epositoryorgmockitomockito-core1.10.19mockito-core-1.10.19.jar;C:Usersguo.m2
    epositoryorgobjenesisobjenesis2.1objenesis-2.1.jar;C:Usersguo.m2
    epositoryorghamcresthamcrest-core1.3hamcrest-core-1.3.jar;C:Usersguo.m2
    epositoryorghamcresthamcrest-library1.3hamcrest-library-1.3.jar;C:Usersguo.m2
    epositoryorgskyscreamerjsonassert1.4.0jsonassert-1.4.0.jar;C:Usersguo.m2
    epositorycomvaadinexternalgoogleandroid-json.0.20131108.vaadin1android-json-0.0.20131108.vaadin1.jar;C:Usersguo.m2
    epositoryorgspringframeworkspring-core4.3.16.RELEASEspring-core-4.3.16.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkspring-test4.3.16.RELEASEspring-test-4.3.16.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot-starter-aop1.5.12.RELEASEspring-boot-starter-aop-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkspring-aop4.3.16.RELEASEspring-aop-4.3.16.RELEASE.jar;C:Usersguo.m2
    epositoryorgaspectjaspectjweaver1.8.13aspectjweaver-1.8.13.jar;C:Usersguo.m2
    epositoryorgmybatisspringootmybatis-spring-boot-starter1.1.1mybatis-spring-boot-starter-1.1.1.jar;C:Usersguo.m2
    epositoryorgmybatisspringootmybatis-spring-boot-autoconfigure1.1.1mybatis-spring-boot-autoconfigure-1.1.1.jar;C:Usersguo.m2
    epositoryorgmybatismybatis3.4.0mybatis-3.4.0.jar;C:Usersguo.m2
    epositoryorgmybatismybatis-spring1.3.0mybatis-spring-1.3.0.jar;C:Usersguo.m2
    epositoryorgspringframeworkootspring-boot-starter-jdbc1.5.12.RELEASEspring-boot-starter-jdbc-1.5.12.RELEASE.jar;C:Usersguo.m2
    epositoryorgapache	omcat	omcat-jdbc8.5.29	omcat-jdbc-8.5.29.jar;C:Usersguo.m2
    epositoryorgapache	omcat	omcat-juli8.5.29	omcat-juli-8.5.29.jar;C:Usersguo.m2
    epositoryorgspringframeworkspring-jdbc4.3.16.RELEASEspring-jdbc-4.3.16.RELEASE.jar;C:Usersguo.m2
    epositoryorgspringframeworkspring-tx4.3.16.RELEASEspring-tx-4.3.16.RELEASE.jar;C:Usersguo.m2
    epositorycomalibabadruid1.0.18druid-1.0.18.jar;C:Program FilesJavajdk1.8.0_141libjconsole.jar;C:Program FilesJavajdk1.8.0_141lib	ools.jar;C:Usersguo.m2
    epositorycomgooglecodegsongson2.7gson-2.7.jar;C:Usersguo.m2
    epositoryorgjsonjson20180130json-20180130.jar;C:Usersguo.m2
    epositorycomfasterxmljacksoncorejackson-core2.9.3jackson-core-2.9.3.jar;C:Usersguo.m2
    epositorycomfasterxmljacksoncorejackson-annotations2.9.3jackson-annotations-2.9.3.jar;C:Usersguo.m2
    epositorycomfasterxmljacksoncorejackson-databind2.9.3jackson-databind-2.9.3.jar;C:Usersguo.m2
    epositorycommons-langcommons-lang2.5commons-lang-2.5.jar;C:Usersguo.m2
    epositoryorgapachecommonscommons-lang33.4commons-lang3-3.4.jar;C:Usersguo.m2
    epositorycomgithubpagehelperpagehelper4.1.6pagehelper-4.1.6.jar;C:Usersguo.m2
    epositorycomgithubjsqlparserjsqlparser.9.5jsqlparser-0.9.5.jar" com.cjcx.pay.obj.ObjectPool
    创建对象池
     对象池 对象数量: 10
    com.cjcx.pay.obj.ObjectPool$Obj@5b6f7412 ==> hello :0
     对象池 对象数量: 10
    com.cjcx.pay.obj.ObjectPool$Obj@7530d0a ==> hello :1
     对象池 对象数量: 10
    com.cjcx.pay.obj.ObjectPool$Obj@3941a79c ==> hello :2
     对象池 对象数量: 10
    com.cjcx.pay.obj.ObjectPool$Obj@4fca772d ==> hello :3
     对象池 对象数量: 10
    com.cjcx.pay.obj.ObjectPool$Obj@9807454 ==> hello :4
     对象池 对象数量: 10
    com.cjcx.pay.obj.ObjectPool$Obj@3d494fbf ==> hello :5
     对象池 对象数量: 10
    com.cjcx.pay.obj.ObjectPool$Obj@1ddc4ec2 ==> hello :6
     对象池 对象数量: 10
    com.cjcx.pay.obj.ObjectPool$Obj@133314b ==> hello :7
     对象池 对象数量: 10
    com.cjcx.pay.obj.ObjectPool$Obj@b1bc7ed ==> hello :8
     对象池 对象数量: 10
    com.cjcx.pay.obj.ObjectPool$Obj@7cd84586 ==> hello :9
     对象池 对象数量: 10
    com.cjcx.pay.obj.ObjectPool$Obj@30dae81 ==> hello :10
     对象池 对象数量: 11
    com.cjcx.pay.obj.ObjectPool$Obj@1b2c6ec2 ==> hello :11
     对象池 对象数量: 12
    com.cjcx.pay.obj.ObjectPool$Obj@4edde6e5 ==> hello :12
     对象池 对象数量: 13
    com.cjcx.pay.obj.ObjectPool$Obj@70177ecd ==> hello :13
     对象池 对象数量: 14
    com.cjcx.pay.obj.ObjectPool$Obj@1e80bfe8 ==> hello :14
     对象池 对象数量: 15
    com.cjcx.pay.obj.ObjectPool$Obj@66a29884 ==> hello :15
     对象池 对象数量: 16
    com.cjcx.pay.obj.ObjectPool$Obj@4769b07b ==> hello :16
     对象池 对象数量: 17
    com.cjcx.pay.obj.ObjectPool$Obj@cc34f4d ==> hello :17
     对象池 对象数量: 18
    com.cjcx.pay.obj.ObjectPool$Obj@17a7cec2 ==> hello :18
     对象池 对象数量: 19
    com.cjcx.pay.obj.ObjectPool$Obj@65b3120a ==> hello :19
     对象池 对象数量: 20
    com.cjcx.pay.obj.ObjectPool$Obj@6f539caf ==> hello :20
     对象池 对象数量: 21
    com.cjcx.pay.obj.ObjectPool$Obj@79fc0f2f ==> hello :21
     对象池 对象数量: 22
    com.cjcx.pay.obj.ObjectPool$Obj@50040f0c ==> hello :22
     对象池 对象数量: 23
    com.cjcx.pay.obj.ObjectPool$Obj@2dda6444 ==> hello :23
     对象池 对象数量: 24
    com.cjcx.pay.obj.ObjectPool$Obj@5e9f23b4 ==> hello :24
     对象池 对象数量: 25
    com.cjcx.pay.obj.ObjectPool$Obj@4783da3f ==> hello :25
     对象池 对象数量: 26
    com.cjcx.pay.obj.ObjectPool$Obj@378fd1ac ==> hello :26
     对象池 对象数量: 27
    com.cjcx.pay.obj.ObjectPool$Obj@49097b5d ==> hello :27
     对象池 对象数量: 28
    com.cjcx.pay.obj.ObjectPool$Obj@6e2c634b ==> hello :28
     对象池 对象数量: 29
    com.cjcx.pay.obj.ObjectPool$Obj@37a71e93 ==> hello :29
     对象池 对象数量: 30
    com.cjcx.pay.obj.ObjectPool$Obj@7e6cbb7a ==> hello :30
     对象池 对象数量: 31
    com.cjcx.pay.obj.ObjectPool$Obj@7c3df479 ==> hello :31
     对象池 对象数量: 32
    com.cjcx.pay.obj.ObjectPool$Obj@7106e68e ==> hello :32
     对象池 对象数量: 33
    com.cjcx.pay.obj.ObjectPool$Obj@7eda2dbb ==> hello :33
     对象池 对象数量: 34
    com.cjcx.pay.obj.ObjectPool$Obj@6576fe71 ==> hello :34
     对象池 对象数量: 35
    com.cjcx.pay.obj.ObjectPool$Obj@76fb509a ==> hello :35
     对象池 对象数量: 36
    com.cjcx.pay.obj.ObjectPool$Obj@300ffa5d ==> hello :36
     对象池 对象数量: 37
    com.cjcx.pay.obj.ObjectPool$Obj@1f17ae12 ==> hello :37
     对象池 对象数量: 38
    com.cjcx.pay.obj.ObjectPool$Obj@4d405ef7 ==> hello :38
     对象池 对象数量: 39
    com.cjcx.pay.obj.ObjectPool$Obj@6193b845 ==> hello :39
     对象池 对象数量: 40
    com.cjcx.pay.obj.ObjectPool$Obj@2e817b38 ==> hello :40
     对象池 对象数量: 41
    com.cjcx.pay.obj.ObjectPool$Obj@c4437c4 ==> hello :41
     对象池 对象数量: 42
    com.cjcx.pay.obj.ObjectPool$Obj@433c675d ==> hello :42
     对象池 对象数量: 43
    com.cjcx.pay.obj.ObjectPool$Obj@3f91beef ==> hello :43
     对象池 对象数量: 44
    com.cjcx.pay.obj.ObjectPool$Obj@1a6c5a9e ==> hello :44
     对象池 对象数量: 45
    com.cjcx.pay.obj.ObjectPool$Obj@37bba400 ==> hello :45
     对象池 对象数量: 46
    com.cjcx.pay.obj.ObjectPool$Obj@179d3b25 ==> hello :46
     对象池 对象数量: 47
    com.cjcx.pay.obj.ObjectPool$Obj@254989ff ==> hello :47
     对象池 对象数量: 48
    com.cjcx.pay.obj.ObjectPool$Obj@5d099f62 ==> hello :48
     对象池 对象数量: 49
    com.cjcx.pay.obj.ObjectPool$Obj@37f8bb67 ==> hello :49
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@5b6f7412 ==> hello :50
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@7530d0a ==> hello :51
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@3941a79c ==> hello :52
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@4fca772d ==> hello :53
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@9807454 ==> hello :54
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@3d494fbf ==> hello :55
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@1ddc4ec2 ==> hello :56
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@133314b ==> hello :57
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@b1bc7ed ==> hello :58
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@7cd84586 ==> hello :59
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@30dae81 ==> hello :60
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@1b2c6ec2 ==> hello :61
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@4edde6e5 ==> hello :62
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@70177ecd ==> hello :63
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@1e80bfe8 ==> hello :64
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@66a29884 ==> hello :65
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@4769b07b ==> hello :66
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@cc34f4d ==> hello :67
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@17a7cec2 ==> hello :68
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@65b3120a ==> hello :69
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@6f539caf ==> hello :70
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@79fc0f2f ==> hello :71
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@50040f0c ==> hello :72
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@2dda6444 ==> hello :73
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@5e9f23b4 ==> hello :74
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@4783da3f ==> hello :75
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@378fd1ac ==> hello :76
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@49097b5d ==> hello :77
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@6e2c634b ==> hello :78
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@37a71e93 ==> hello :79
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@7e6cbb7a ==> hello :80
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@7c3df479 ==> hello :81
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@7106e68e ==> hello :82
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@7eda2dbb ==> hello :83
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@6576fe71 ==> hello :84
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@5b6f7412 ==> hello :85
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@7530d0a ==> hello :86
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@3941a79c ==> hello :87
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@4fca772d ==> hello :88
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@9807454 ==> hello :89
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@3d494fbf ==> hello :90
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@1ddc4ec2 ==> hello :91
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@133314b ==> hello :92
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@b1bc7ed ==> hello :93
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@7cd84586 ==> hello :94
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@30dae81 ==> hello :95
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@1b2c6ec2 ==> hello :96
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@4edde6e5 ==> hello :97
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@70177ecd ==> hello :98
     对象池 对象数量: 50
    com.cjcx.pay.obj.ObjectPool$Obj@1e80bfe8 ==> hello :99
    清空对象池
    
    Process finished with exit code 0

    可见对象重复利用了,

  • 相关阅读:
    02-01官网静默模式安装WebLogic
    01-java技术体系基础
    MySQL安装的三种方式
    centos虚拟机初始化脚本
    Nginx编译配置介绍
    word发布博客至博客园
    Bash shell编程的语法知识点(1)
    c=$[$c%5]到let c=$c%5的转换
    <转>shell经典,shell十三问
    进程管理工具htop/glances/dstat的使用
  • 原文地址:https://www.cnblogs.com/eason-d/p/9620286.html
Copyright © 2011-2022 走看看