对象池 优点: 防止过多的创建对象合理利用对象, 缺点: 会有线程阻塞
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
可见对象重复利用了,