IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> commons-pool2(2.6.2)实现对象池-jdk8 -> 正文阅读

[开发测试]commons-pool2(2.6.2)实现对象池-jdk8

commons-pool2(2.6.2)实现对象池-jdk8

springboot web项目中,有很多 非线程安全类(jdk自带或者第三方包引入),每次都创建一个 不太友好。就使用 commons-pool2 实现对象池处理,有两种实现方式:

  • GenericObjectPool<T>,GenericObjectPoolConfig<T>
  • GenericKeyedObjectPool<T>,GenericKeyedObjectPoolConfig<T>

频繁的创建和销毁,会极大的降低系统的性能,而对象池会在初始化的时候会创建一定数量的对象,每次访问只需从对象池中获取对象,使用完毕后再放回对象池,并不是直接销毁,这样可以保证程序重复使用同一个对象而不需要每次访问都创建和销毁对象, 从而提高系统性能

参考链接

springboot使用commons-pool2实现对象池
commons-pool实战之 KeyedPoolableObjectFactory和KeyedObjectPool
GenericObjectPool参数解析
聊聊GenericObjectPool的泄露检测
commons-pool2 3 - 配置介绍,BaseObjectPoolConfig,AbandonedConfig,EvictionConfig
apache-common-pool2对象池的使用

jdk(java)8 日期格式化工具-使用枚举处理

list或数组转map代码-demo

public static final String[] KEYS = {"K1","K2","K3","K4"};
// 数组 转 map
Map<String, ArrayList<TestObject>> map = Stream.of(KEYS)
  .collect(Collectors.toMap(String::trim,k->new ArrayList<>(size),(k1, k2) -> k1));
// list 转 map
List<String> keys = Arrays.asList(KEYS);
Map<String, ArrayList<TestObject>> map = keys.stream()
   .collect(Collectors.toMap(k->k, k -> new ArrayList<>(size), (k1, k2) -> k1));

正文

pom

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
    <version>2.6.2</version>
</dependency>

实体类-池化主体

package ***.pools;

/**
 * 待池化对象
 *
 * @author z.y.
 * @version v1.0
 * @date 2022/3/28
 */
public class TestObject {
    private String name;
    private boolean active;
    public TestObject(){}
    public TestObject(String name){ this.name = name; }
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public void setActive(boolean active) { this.active = active; }
    public boolean isActive() { return active; }
    public void destroy(){
        active = false;
        System.out.println(name+":销毁");
    }
}

方案1-对象池

package ***.pools;

import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.AbandonedConfig;
import org.apache.commons.pool2.impl.GenericObjectPool;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;

/**
 * 对象池
 *
 * @author z.y.
 * @version v1.0
 * @date 2022/3/28
 */
public class TestObjectPool extends GenericObjectPool<TestObject> {
    public TestObjectPool(PooledObjectFactory<TestObject> factory) {
        super(factory);
    }
    public TestObjectPool(PooledObjectFactory<TestObject> factory, GenericObjectPoolConfig<TestObject> config) {
        super(factory, config);
    }
    public TestObjectPool(PooledObjectFactory<TestObject> factory, GenericObjectPoolConfig<TestObject> config, AbandonedConfig abandonedConfig) {
        super(factory, config, abandonedConfig);
        //maxWaitMillis 当连接池资源耗尽时,等待时间,超出则抛异常,默认为-1即永不超时
        //testOnCreate 默认false,create的时候检测是有有效,如果无效则从连接池中移除,并尝试继续获取
        //numTestsPerEvictionRun 在每次空闲连接回收器线程(如果有)运行时检查的连接数量,默认为3
        //minEvictableIdleTimeMillis 连接空闲的最小时间,达到此值后空闲连接将可能会被移除。默认为1000L 60L 30L
        //softMinEvictableIdleTimeMillis 连接空闲的最小时间,达到此值后空闲链接将会被移除,且保留minIdle个空闲连接数。默认为-1.
        //evictionPolicyClassName evict策略的类名,默认为org.apache.commons.pool2.impl.DefaultEvictionPolicy

        //EvictConfig针对的是idle状态下,进行"驱逐',默认DefaultEvictionPolicy
        //idleEvictTime pooledObject保持了idle状态的时长超过了该值,会被evict
        //idleSoftEvictTime 软标准情况下,pooledObject保持了idle状态的时长,判断是否evict
        //minIdle 软标准情况下,至少留下几个object继续保持idle(节省开销)

        //AbandonedConfig 针对的是allocate状态下(或者说active状态下),进行"丢弃",只有GenericObjectPool可以用
        //一般是用于连接泄露的检测,检测的是在使用的对象,比如怀疑那个对象被占用时间超长,那估计是程序异常或bug导致对象borrow了但忘记归还,或者对象borrow之后使用时间太长
        //removeAbandonedOnBorrow 在borrow的时候,是否执行abandon判断,默认false
        //removeAbandonedOnMaintenance 是否在evictor中执行abandon判断,默认false
        //removeAbandonedTimeout 一个对象在被borrow之后多少秒未归还则认为是abandon,默认为300
        //logAbandoned 是否打印abandon的日志,默认为false
        //useUsageTracking 是否追踪对象调用并保留最近的调用记录方便debug
    }
}

方案2-对象池

package ***.pools;

import org.apache.commons.pool2.KeyedPooledObjectFactory;
import org.apache.commons.pool2.impl.GenericKeyedObjectPool;
import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig;

/**
 * 对象池-通过key获取
 *
 * @author z.y.
 * @version v1.0
 * @date 2022/3/29
 */
public class TestKeyObjectPool extends GenericKeyedObjectPool<String,TestObject> {
    public TestKeyObjectPool(KeyedPooledObjectFactory<String, TestObject> factory) {
        super(factory);
    }
    public TestKeyObjectPool(KeyedPooledObjectFactory<String, TestObject> factory, GenericKeyedObjectPoolConfig<TestObject> config) {
        super(factory, config);
    }
}

方案1-工厂类

package ***.pools;

import ***.enums.DateFormatEnum;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.PooledObjectFactory;
import org.apache.commons.pool2.impl.DefaultPooledObject;

/**
 * TestObject 工厂类
 *
 * @author z.y.
 * @version v1.0
 * @date 2022/3/28
 */
public class TestObjectFactory implements PooledObjectFactory<TestObject> {
    /** 构建对象 */
    @Override
    public PooledObject<TestObject> makeObject() throws Exception {
        TestObject object = new TestObject(DateFormatEnum.y_M_d_H_m_s_S_1.format());
        System.out.println(object.getName() + ",构建对象");
        return new DefaultPooledObject<>(object);
    }
    /** 销毁对象 */
    @Override
    public void destroyObject(PooledObject<TestObject> pooledObject) throws Exception {
        TestObject object = pooledObject.getObject();
        System.out.println(object.getName() + ",销毁对象");
        object.destroy();
    }
    /** 验证对象是否可用 */
    @Override
    public boolean validateObject(PooledObject<TestObject> pooledObject) {
        TestObject object = pooledObject.getObject();
        System.out.println(object.getName() + ",验证对象是否可用");
        return object.isActive();
    }
    /** 激活对象,使其可用 */
    @Override
    public void activateObject(PooledObject<TestObject> pooledObject) throws Exception {
        TestObject object = pooledObject.getObject();
        System.out.println(object.getName() + ",激活对象,使其可用");
        object.setActive(true);
    }
    /** 钝化一个对象,反初始化 */
    @Override
    public void passivateObject(PooledObject<TestObject> pooledObject) throws Exception {
        System.out.println(pooledObject.getObject().getName() + ",钝化一个对象");
    }
}

方案2-工厂类

package ***.pools;

import ***.enums.DateFormatEnum;
import org.apache.commons.pool2.KeyedPooledObjectFactory;
import org.apache.commons.pool2.PooledObject;
import org.apache.commons.pool2.impl.DefaultPooledObject;

/**
 * TestObject 工厂类-通过key获取
 *
 * @author z.y.
 * @version v1.0
 * @date 2022/3/29
 */
public class TestKeyObjectFactory implements KeyedPooledObjectFactory<String,TestObject> {
    /** 构建对象 */
    @Override
    public PooledObject<TestObject> makeObject(String key) throws Exception {
        TestObject object = new TestObject(key +"[k]:"+DateFormatEnum.y_M_d_H_m_s_S_1.format());
        System.out.println(object.getName() + ",k-构建对象");
        return new DefaultPooledObject<>(object);
    }
    /** 销毁对象 */
    @Override
    public void destroyObject(String s, PooledObject<TestObject> pooledObject) throws Exception {
        TestObject object = pooledObject.getObject();
        System.out.println(object.getName() + ",k-销毁对象");
        object.destroy();
    }
    @Override
    public boolean validateObject(String s, PooledObject<TestObject> pooledObject) {
        TestObject object = pooledObject.getObject();
        System.out.println(object.getName() + ",k-验证对象是否可用");
        return object.isActive();
    }
    @Override
    public void activateObject(String s, PooledObject<TestObject> pooledObject) throws Exception {
        TestObject object = pooledObject.getObject();
        System.out.println(object.getName() + ",k-激活对象");
        object.setActive(true);
    }
    @Override
    public void passivateObject(String s, PooledObject<TestObject> pooledObject) throws Exception {
        System.out.println(pooledObject.getObject().getName() + ",k-钝化一个对象");
    }
}

配置类

package ***.pools;

import org.springframework.boot.context.properties.ConfigurationProperties;

/**
 * 对象池配置
 *
 * @author z.y.
 * @version v1.0
 * @date 2022/3/28
 */
@ConfigurationProperties(prefix = TestPoolProperties.PRE)
public class TestPoolProperties {
    public static final String PRE = "pro.obj";
    /** 最大空闲 */
    private int maxIdle = 2;
    /** 最大总数 */
    private int maxTotal = 5;
    /** 最小空闲 */
    private int minIdle = 0;
    /** 初始化 */
    private int initialSize = 1;
    /** Key最大空闲 */
    private int maxIdleKey = 2;
    /** Key最大总数 */
    private int maxTotalKey = 5;
    /** Key最小空闲 */
    private int minIdleKey = 0;
    /** Key初始化 */
    private int initialSizeKey = 1;

    public int getMaxIdle() { return maxIdle; }
    public void setMaxIdle(int maxIdle) { this.maxIdle = maxIdle; }
    public int getMaxTotal() { return maxTotal; }
    public void setMaxTotal(int maxTotal) { this.maxTotal = maxTotal; }
    public int getMinIdle() { return minIdle; }
    public void setMinIdle(int minIdle) { this.minIdle = minIdle; }
    public int getInitialSize() { return initialSize; }
    public void setInitialSize(int initialSize) { this.initialSize = initialSize; }
    public int getMaxIdleKey() { return maxIdleKey; }
    public void setMaxIdleKey(int maxIdleKey) { this.maxIdleKey = maxIdleKey; }
    public int getMaxTotalKey() { return maxTotalKey; }
    public void setMaxTotalKey(int maxTotalKey) { this.maxTotalKey = maxTotalKey; }
    public int getMinIdleKey() { return minIdleKey; }
    public void setMinIdleKey(int minIdleKey) { this.minIdleKey = minIdleKey; }
    public int getInitialSizeKey() { return initialSizeKey; }
    public void setInitialSizeKey(int initialSizeKey) { this.initialSizeKey = initialSizeKey; }
}

配置自动装配

package ***.pools;

import org.apache.commons.pool2.impl.GenericKeyedObjectPool;
import org.apache.commons.pool2.impl.GenericKeyedObjectPoolConfig;
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.annotation.PreDestroy;
import java.util.concurrent.TimeUnit;

/**
 * 自动装配 对象池配置
 *
 * @author z.y.
 * @version v1.0
 * @date 2022/3/28
 */
@Configuration
@EnableConfigurationProperties(TestPoolProperties.class)
public class TestPoolCfg {
    private final TestPoolProperties testPoolProperties;
    private TestObjectPool pool;
    private TestKeyObjectPool keyPool;
    @Autowired
    public TestPoolCfg(TestPoolProperties testPoolProperties){
        this.testPoolProperties = testPoolProperties;
    }
    @Bean
    @ConditionalOnClass(TestObjectFactory.class)
    protected TestObjectPool objectPool(){
        TestObjectFactory factory = new TestObjectFactory();
        GenericObjectPoolConfig<TestObject> config = new GenericObjectPoolConfig<>();
        //链接池中最大连接数,默认为8
        config.setMaxTotal(testPoolProperties.getMaxTotal());
        //链接池中最大空闲的连接数,默认也为8
        config.setMaxIdle(testPoolProperties.getMaxIdle());
        //连接池中最少空闲的连接数,默认为0
        config.setMinIdle(testPoolProperties.getMinIdle());
        //当这个值为true的时候,maxWaitMillis参数才能生效。为false的时候,当连接池没资源,则立马抛异常。默认为true
        config.setBlockWhenExhausted(true);
        //默认false,borrow的时候检测是有有效,如果无效则从连接池中移除,并尝试继续获取
        config.setTestOnBorrow(true);
        //默认false,return的时候检测是有有效,如果无效则从连接池中移除,并尝试继续获取
        config.setTestOnReturn(true);
        //默认false,在evictor线程里头,当evictionPolicy.evict方法返回false时,而且testWhileIdle为true的时候则检测是否有效,如果无效则移除
        config.setTestWhileIdle(true);
        //空闲链接检测线程检测的周期,毫秒数。如果为负值,表示不运行检测线程。默认为-1
        config.setTimeBetweenEvictionRunsMillis(1000*60*30);
        //一定要关闭jmx,不然springboot启动会报已经注册了某个jmx的错误
        config.setJmxEnabled(false);

        // 新建 对象池,并传入 配置
        pool = new TestObjectPool(factory,config);
        initPool(testPoolProperties.getInitialSize(),testPoolProperties.getMaxIdle());
        return pool;
    }
    /** 预加载 对象到对象池 */
    private void initPool(int initialSize,int maxIdle){
        if( initialSize < 0 ){ return; }
        int size = Math.max(initialSize,maxIdle);
        try {
            for (int i = 0; i < size; i++) {
            pool.addObject();
            TimeUnit.MILLISECONDS.sleep(100L);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    /** 多个key 每个key 一个组*/
    public static final String[] KEYS = {"K1","K2","K3","K4"};
    @Bean
    @ConditionalOnClass(TestObjectFactory.class)
    protected TestKeyObjectPool keyObjectPool(){
        TestKeyObjectFactory factory = new TestKeyObjectFactory();
        GenericKeyedObjectPoolConfig<TestObject> config = new GenericKeyedObjectPoolConfig<>();
        // 多个key组 总最大数
        config.setMaxTotal(testPoolProperties.getMaxTotalKey()*KEYS.length);
        // 一个key组 最大数
        config.setMaxTotalPerKey(testPoolProperties.getMaxTotalKey());
        // 一个key组 最大空闲数
        config.setMaxIdlePerKey(testPoolProperties.getMaxIdleKey());
        // 一个key组 最小空闲数
        config.setMinIdlePerKey(testPoolProperties.getMinIdleKey());
        config.setBlockWhenExhausted(true);
        config.setTestOnReturn(true);
        config.setTestOnBorrow(true);
        config.setTestWhileIdle(true);
        config.setTimeBetweenEvictionRunsMillis(1000*60*30);
        config.setJmxEnabled(false);

        keyPool = new TestKeyObjectPool(factory,config);
        initKeyPool(testPoolProperties.getInitialSize(),testPoolProperties.getMaxIdle());
        return keyPool;
    }
    /** 预加载 对象到对象池 */
    private void initKeyPool(int initialSize,int maxIdle){
        if( initialSize < 0 ){ return; }
        int size = Math.max(initialSize,maxIdle);
        try {
            for (int i = 0; i < size; i++) {
                for (String key : KEYS) { keyPool.addObject(key); }
                TimeUnit.MILLISECONDS.sleep(100L);
            }
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    @PreDestroy
    public void destroy(){
        System.out.println("对象池关闭-start");
        if( null != pool ){ pool.close(); }
        if( null != keyPool ){ keyPool.close(); }
        System.out.println("对象池关闭-end");
    }
}

测试

代码

package ***.controller;

import ***.enums.DateFormatEnum;
import ***.pools.TestKeyObjectPool;
import ***.pools.TestObject;
import ***.pools.TestObjectPool;
import ***.pools.TestPoolCfg;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * TestController 类说明:
 *
 * @author z.y.
 * @version v1.0
 * @date 2022/3/25
 */
@RestController
@RequestMapping ("/test")
@Api (value = "test-测试",tags = {"test-测试"})
public class TestController {
    private static final Logger logger = LoggerFactory.getLogger(TestController.class);
    private TestObjectPool testObjectPool;
    private TestKeyObjectPool testKeyObjectPool;
    @Autowired
    public void setTestObjectPool(TestObjectPool testObjectPool) {
        this.testObjectPool = testObjectPool;
    }
    @Autowired
    public void setTestKeyObjectPool(TestKeyObjectPool testKeyObjectPool) {
        this.testKeyObjectPool = testKeyObjectPool;
    }

    @GetMapping("pool")
    @ApiOperation(value = "测试对象池1",notes = "测试对象池1-[jk-zyl]")
    public void pool(int size){
        size = Math.max(1, size);
        pool1(size);
        pool2(size);
    }
    public void pool1(int size){
        List<TestObject> list = new ArrayList<>(size);
        try {
            TestObject object;
            for (int i = 0; i < size; i++) {
                if( testObjectPool.getNumActive() >= testObjectPool.getMaxTotal() ){
                    object = list.get(0);
                    testObjectPool.returnObject(object);
                    list.remove(0);
                    logger.info("\n{},测试对象池,回收",object.getName());
                }
                object = testObjectPool.borrowObject();
                logger.info("\n{},测试对象池,下标:{},list:{},活跃:{},空闲:{}",object.getName(),i,list.size(),testObjectPool.getNumActive(),testObjectPool.getNumIdle());
                list.add(object);
            }
        } catch (Exception e) {
            logger.error("异常",e);
        }finally {
            for (TestObject object : list) {
                if( null != object ){
                    testObjectPool.returnObject(object);
                }
            }
        }
    }
    public void pool2(int size){
        List<String> keys = Arrays.asList(TestPoolCfg.KEYS);
        // list 转 map
        Map<String, ArrayList<TestObject>> map = keys.stream()
                .collect(Collectors.toMap(k->k, k -> new ArrayList<>(size), (k1, k2) -> k1));
        try {
            TestObject object;
            for (int i = 0; i < size; i++) {
                for (String key : keys) {
                    if( testKeyObjectPool.getNumActive() >= testKeyObjectPool.getMaxTotal() ){
                        object = map.get(key).get(0);
                        testKeyObjectPool.returnObject(key,object);
                        map.get(key).remove(0);
                        logger.info("\n{},k-测试对象池,回收",object.getName());
                    }
                    object = testKeyObjectPool.borrowObject(key);
                    logger.info("\n{},{},k-测试对象池,下标:{},list:{},活跃:{},空闲:{}",key,object.getName(),i,map.get(key).size()
                            ,testKeyObjectPool.getNumActive(),testKeyObjectPool.getNumIdle());
                    map.get(key).add(object);
                }
            }
        } catch (Exception e) {
            logger.error("异常",e);
        }finally {
            for (String key : map.keySet()) {
                for (TestObject object : map.get(key)) {
                    if( null != object ){
                        testKeyObjectPool.returnObject(key,object);
                    }
                }
            }
        }
    }
}

日志

项目启动日志

2022-03-29 10:39:34.406,构建对象
2022-03-29 10:39:34.406,钝化一个对象
2022-03-29 10:39:34.511,构建对象
2022-03-29 10:39:34.511,钝化一个对象
K1[k]:2022-03-29 10:39:34.657,k-构建对象
K1[k]:2022-03-29 10:39:34.657,k-钝化一个对象
K2[k]:2022-03-29 10:39:34.658,k-构建对象
K2[k]:2022-03-29 10:39:34.658,k-钝化一个对象
K3[k]:2022-03-29 10:39:34.658,k-构建对象
K3[k]:2022-03-29 10:39:34.658,k-钝化一个对象
K4[k]:2022-03-29 10:39:34.659,k-构建对象
K4[k]:2022-03-29 10:39:34.659,k-钝化一个对象
K1[k]:2022-03-29 10:39:34.759,k-构建对象
K1[k]:2022-03-29 10:39:34.759,k-钝化一个对象
K2[k]:2022-03-29 10:39:34.759,k-构建对象
K2[k]:2022-03-29 10:39:34.759,k-钝化一个对象
K3[k]:2022-03-29 10:39:34.759,k-构建对象
K3[k]:2022-03-29 10:39:34.759,k-钝化一个对象
K4[k]:2022-03-29 10:39:34.759,k-构建对象
K4[k]:2022-03-29 10:39:34.759,k-钝化一个对象

测试路径http://localhost/test/pool?size=8
测试日志

2022-03-29 10:39:34.511,激活对象,使其可用
2022-03-29 10:39:34.511,验证对象是否可用
2022-03-29 10:39:53.072  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
2022-03-29 10:39:34.511,测试对象池,下标:0,list:0,活跃:1,空闲:1
2022-03-29 10:39:34.406,激活对象,使其可用
2022-03-29 10:39:34.406,验证对象是否可用
2022-03-29 10:39:53.072  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
2022-03-29 10:39:34.406,测试对象池,下标:1,list:1,活跃:2,空闲:0
2022-03-29 10:39:53.072,构建对象
2022-03-29 10:39:53.072,激活对象,使其可用
2022-03-29 10:39:53.072,验证对象是否可用
2022-03-29 10:39:53.072  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
2022-03-29 10:39:53.072,测试对象池,下标:2,list:2,活跃:3,空闲:0
2022-03-29 10:39:53.072,构建对象
2022-03-29 10:39:53.072,激活对象,使其可用
2022-03-29 10:39:53.072,验证对象是否可用
2022-03-29 10:39:53.073  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
2022-03-29 10:39:53.072,测试对象池,下标:3,list:3,活跃:4,空闲:0
2022-03-29 10:39:53.073,构建对象
2022-03-29 10:39:53.073,激活对象,使其可用
2022-03-29 10:39:53.073,验证对象是否可用
2022-03-29 10:39:53.073  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
2022-03-29 10:39:53.073,测试对象池,下标:4,list:4,活跃:5,空闲:0
2022-03-29 10:39:34.511,验证对象是否可用
2022-03-29 10:39:34.511,钝化一个对象
2022-03-29 10:39:53.073  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
2022-03-29 10:39:34.511,测试对象池,回收
2022-03-29 10:39:34.511,激活对象,使其可用
2022-03-29 10:39:34.511,验证对象是否可用
2022-03-29 10:39:53.073  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
2022-03-29 10:39:34.511,测试对象池,下标:5,list:4,活跃:5,空闲:0
2022-03-29 10:39:34.406,验证对象是否可用
2022-03-29 10:39:34.406,钝化一个对象
2022-03-29 10:39:53.073  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
2022-03-29 10:39:34.406,测试对象池,回收
2022-03-29 10:39:34.406,激活对象,使其可用
2022-03-29 10:39:34.406,验证对象是否可用
2022-03-29 10:39:53.073  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
2022-03-29 10:39:34.406,测试对象池,下标:6,list:4,活跃:5,空闲:0
2022-03-29 10:39:53.072,验证对象是否可用
2022-03-29 10:39:53.072,钝化一个对象
2022-03-29 10:39:53.073  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
2022-03-29 10:39:53.072,测试对象池,回收
2022-03-29 10:39:53.072,激活对象,使其可用
2022-03-29 10:39:53.072,验证对象是否可用
2022-03-29 10:39:53.073  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
2022-03-29 10:39:53.072,测试对象池,下标:7,list:4,活跃:5,空闲:0
2022-03-29 10:39:53.072,验证对象是否可用
2022-03-29 10:39:53.072,钝化一个对象
2022-03-29 10:39:53.073,验证对象是否可用
2022-03-29 10:39:53.073,钝化一个对象
2022-03-29 10:39:34.511,验证对象是否可用
2022-03-29 10:39:34.511,钝化一个对象
2022-03-29 10:39:34.511,销毁对象
2022-03-29 10:39:34.511:销毁
2022-03-29 10:39:34.406,验证对象是否可用
2022-03-29 10:39:34.406,钝化一个对象
2022-03-29 10:39:34.406,销毁对象
2022-03-29 10:39:34.406:销毁
2022-03-29 10:39:53.072,验证对象是否可用
2022-03-29 10:39:53.072,钝化一个对象
2022-03-29 10:39:53.072,销毁对象
2022-03-29 10:39:53.072:销毁
K1[k]:2022-03-29 10:39:34.759,k-激活对象
K1[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
2022-03-29 10:39:53.075  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K1,K1[k]:2022-03-29 10:39:34.759,k-测试对象池,下标:0,list:0,活跃:1,空闲:7
K2[k]:2022-03-29 10:39:34.759,k-激活对象
K2[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
2022-03-29 10:39:53.075  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K2,K2[k]:2022-03-29 10:39:34.759,k-测试对象池,下标:0,list:0,活跃:2,空闲:6
K3[k]:2022-03-29 10:39:34.759,k-激活对象
K3[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
2022-03-29 10:39:53.075  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K3,K3[k]:2022-03-29 10:39:34.759,k-测试对象池,下标:0,list:0,活跃:3,空闲:5
K4[k]:2022-03-29 10:39:34.759,k-激活对象
K4[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
2022-03-29 10:39:53.075  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K4,K4[k]:2022-03-29 10:39:34.759,k-测试对象池,下标:0,list:0,活跃:4,空闲:4
K1[k]:2022-03-29 10:39:34.657,k-激活对象
K1[k]:2022-03-29 10:39:34.657,k-验证对象是否可用
2022-03-29 10:39:53.075  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K1,K1[k]:2022-03-29 10:39:34.657,k-测试对象池,下标:1,list:1,活跃:5,空闲:3
K2[k]:2022-03-29 10:39:34.658,k-激活对象
K2[k]:2022-03-29 10:39:34.658,k-验证对象是否可用
2022-03-29 10:39:53.075  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K2,K2[k]:2022-03-29 10:39:34.658,k-测试对象池,下标:1,list:1,活跃:6,空闲:2
K3[k]:2022-03-29 10:39:34.658,k-激活对象
K3[k]:2022-03-29 10:39:34.658,k-验证对象是否可用
2022-03-29 10:39:53.075  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K3,K3[k]:2022-03-29 10:39:34.658,k-测试对象池,下标:1,list:1,活跃:7,空闲:1
K4[k]:2022-03-29 10:39:34.659,k-激活对象
K4[k]:2022-03-29 10:39:34.659,k-验证对象是否可用
2022-03-29 10:39:53.075  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K4,K4[k]:2022-03-29 10:39:34.659,k-测试对象池,下标:1,list:1,活跃:8,空闲:0
K1[k]:2022-03-29 10:39:53.075,k-构建对象
K1[k]:2022-03-29 10:39:53.075,k-激活对象
K1[k]:2022-03-29 10:39:53.075,k-验证对象是否可用
2022-03-29 10:39:53.076  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K1,K1[k]:2022-03-29 10:39:53.075,k-测试对象池,下标:2,list:2,活跃:9,空闲:0
K2[k]:2022-03-29 10:39:53.076,k-构建对象
K2[k]:2022-03-29 10:39:53.076,k-激活对象
K2[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
2022-03-29 10:39:53.076  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K2,K2[k]:2022-03-29 10:39:53.076,k-测试对象池,下标:2,list:2,活跃:10,空闲:0
K3[k]:2022-03-29 10:39:53.076,k-构建对象
K3[k]:2022-03-29 10:39:53.076,k-激活对象
K3[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
2022-03-29 10:39:53.076  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K3,K3[k]:2022-03-29 10:39:53.076,k-测试对象池,下标:2,list:2,活跃:11,空闲:0
K4[k]:2022-03-29 10:39:53.076,k-构建对象
K4[k]:2022-03-29 10:39:53.076,k-激活对象
K4[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
2022-03-29 10:39:53.076  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K4,K4[k]:2022-03-29 10:39:53.076,k-测试对象池,下标:2,list:2,活跃:12,空闲:0
K1[k]:2022-03-29 10:39:53.076,k-构建对象
K1[k]:2022-03-29 10:39:53.076,k-激活对象
K1[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
2022-03-29 10:39:53.076  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K1,K1[k]:2022-03-29 10:39:53.076,k-测试对象池,下标:3,list:3,活跃:13,空闲:0
K2[k]:2022-03-29 10:39:53.076,k-构建对象
K2[k]:2022-03-29 10:39:53.076,k-激活对象
K2[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
2022-03-29 10:39:53.076  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K2,K2[k]:2022-03-29 10:39:53.076,k-测试对象池,下标:3,list:3,活跃:14,空闲:0
K3[k]:2022-03-29 10:39:53.076,k-构建对象
K3[k]:2022-03-29 10:39:53.076,k-激活对象
K3[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
2022-03-29 10:39:53.076  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K3,K3[k]:2022-03-29 10:39:53.076,k-测试对象池,下标:3,list:3,活跃:15,空闲:0
K4[k]:2022-03-29 10:39:53.076,k-构建对象
K4[k]:2022-03-29 10:39:53.076,k-激活对象
K4[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
2022-03-29 10:39:53.076  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K4,K4[k]:2022-03-29 10:39:53.076,k-测试对象池,下标:3,list:3,活跃:16,空闲:0
K1[k]:2022-03-29 10:39:53.077,k-构建对象
K1[k]:2022-03-29 10:39:53.077,k-激活对象
K1[k]:2022-03-29 10:39:53.077,k-验证对象是否可用
2022-03-29 10:39:53.077  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K1,K1[k]:2022-03-29 10:39:53.077,k-测试对象池,下标:4,list:4,活跃:17,空闲:0
K2[k]:2022-03-29 10:39:53.077,k-构建对象
K2[k]:2022-03-29 10:39:53.077,k-激活对象
K2[k]:2022-03-29 10:39:53.077,k-验证对象是否可用
2022-03-29 10:39:53.077  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K2,K2[k]:2022-03-29 10:39:53.077,k-测试对象池,下标:4,list:4,活跃:18,空闲:0
K3[k]:2022-03-29 10:39:53.077,k-构建对象
K3[k]:2022-03-29 10:39:53.077,k-激活对象
K3[k]:2022-03-29 10:39:53.077,k-验证对象是否可用
2022-03-29 10:39:53.077  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K3,K3[k]:2022-03-29 10:39:53.077,k-测试对象池,下标:4,list:4,活跃:19,空闲:0
K4[k]:2022-03-29 10:39:53.077,k-构建对象
K4[k]:2022-03-29 10:39:53.077,k-激活对象
K4[k]:2022-03-29 10:39:53.077,k-验证对象是否可用
2022-03-29 10:39:53.077  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K4,K4[k]:2022-03-29 10:39:53.077,k-测试对象池,下标:4,list:4,活跃:20,空闲:0
K1[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
K1[k]:2022-03-29 10:39:34.759,k-钝化一个对象
2022-03-29 10:39:53.077  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K1[k]:2022-03-29 10:39:34.759,k-测试对象池,回收
K1[k]:2022-03-29 10:39:34.759,k-激活对象
K1[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
2022-03-29 10:39:53.077  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K1,K1[k]:2022-03-29 10:39:34.759,k-测试对象池,下标:5,list:4,活跃:20,空闲:0
K2[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
K2[k]:2022-03-29 10:39:34.759,k-钝化一个对象
2022-03-29 10:39:53.077  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K2[k]:2022-03-29 10:39:34.759,k-测试对象池,回收
K2[k]:2022-03-29 10:39:34.759,k-激活对象
K2[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K2,K2[k]:2022-03-29 10:39:34.759,k-测试对象池,下标:5,list:4,活跃:20,空闲:0
K3[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
K3[k]:2022-03-29 10:39:34.759,k-钝化一个对象
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K3[k]:2022-03-29 10:39:34.759,k-测试对象池,回收
K3[k]:2022-03-29 10:39:34.759,k-激活对象
K3[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K3,K3[k]:2022-03-29 10:39:34.759,k-测试对象池,下标:5,list:4,活跃:20,空闲:0
K4[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
K4[k]:2022-03-29 10:39:34.759,k-钝化一个对象
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K4[k]:2022-03-29 10:39:34.759,k-测试对象池,回收
K4[k]:2022-03-29 10:39:34.759,k-激活对象
K4[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K4,K4[k]:2022-03-29 10:39:34.759,k-测试对象池,下标:5,list:4,活跃:20,空闲:0
K1[k]:2022-03-29 10:39:34.657,k-验证对象是否可用
K1[k]:2022-03-29 10:39:34.657,k-钝化一个对象
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K1[k]:2022-03-29 10:39:34.657,k-测试对象池,回收
K1[k]:2022-03-29 10:39:34.657,k-激活对象
K1[k]:2022-03-29 10:39:34.657,k-验证对象是否可用
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K1,K1[k]:2022-03-29 10:39:34.657,k-测试对象池,下标:6,list:4,活跃:20,空闲:0
K2[k]:2022-03-29 10:39:34.658,k-验证对象是否可用
K2[k]:2022-03-29 10:39:34.658,k-钝化一个对象
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K2[k]:2022-03-29 10:39:34.658,k-测试对象池,回收
K2[k]:2022-03-29 10:39:34.658,k-激活对象
K2[k]:2022-03-29 10:39:34.658,k-验证对象是否可用
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K2,K2[k]:2022-03-29 10:39:34.658,k-测试对象池,下标:6,list:4,活跃:20,空闲:0
K3[k]:2022-03-29 10:39:34.658,k-验证对象是否可用
K3[k]:2022-03-29 10:39:34.658,k-钝化一个对象
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K3[k]:2022-03-29 10:39:34.658,k-测试对象池,回收
K3[k]:2022-03-29 10:39:34.658,k-激活对象
K3[k]:2022-03-29 10:39:34.658,k-验证对象是否可用
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K3,K3[k]:2022-03-29 10:39:34.658,k-测试对象池,下标:6,list:4,活跃:20,空闲:0
K4[k]:2022-03-29 10:39:34.659,k-验证对象是否可用
K4[k]:2022-03-29 10:39:34.659,k-钝化一个对象
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K4[k]:2022-03-29 10:39:34.659,k-测试对象池,回收
K4[k]:2022-03-29 10:39:34.659,k-激活对象
K4[k]:2022-03-29 10:39:34.659,k-验证对象是否可用
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K4,K4[k]:2022-03-29 10:39:34.659,k-测试对象池,下标:6,list:4,活跃:20,空闲:0
K1[k]:2022-03-29 10:39:53.075,k-验证对象是否可用
K1[k]:2022-03-29 10:39:53.075,k-钝化一个对象
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K1[k]:2022-03-29 10:39:53.075,k-测试对象池,回收
K1[k]:2022-03-29 10:39:53.075,k-激活对象
K1[k]:2022-03-29 10:39:53.075,k-验证对象是否可用
2022-03-29 10:39:53.078  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K1,K1[k]:2022-03-29 10:39:53.075,k-测试对象池,下标:7,list:4,活跃:20,空闲:0
K2[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
K2[k]:2022-03-29 10:39:53.076,k-钝化一个对象
2022-03-29 10:39:53.079  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K2[k]:2022-03-29 10:39:53.076,k-测试对象池,回收
K2[k]:2022-03-29 10:39:53.076,k-激活对象
K2[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
2022-03-29 10:39:53.079  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K2,K2[k]:2022-03-29 10:39:53.076,k-测试对象池,下标:7,list:4,活跃:20,空闲:0
K3[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
K3[k]:2022-03-29 10:39:53.076,k-钝化一个对象
2022-03-29 10:39:53.079  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K3[k]:2022-03-29 10:39:53.076,k-测试对象池,回收
K3[k]:2022-03-29 10:39:53.076,k-激活对象
K3[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
2022-03-29 10:39:53.079  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K3,K3[k]:2022-03-29 10:39:53.076,k-测试对象池,下标:7,list:4,活跃:20,空闲:0
K4[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
K4[k]:2022-03-29 10:39:53.076,k-钝化一个对象
2022-03-29 10:39:53.079  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K4[k]:2022-03-29 10:39:53.076,k-测试对象池,回收
K4[k]:2022-03-29 10:39:53.076,k-激活对象
K4[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
2022-03-29 10:39:53.079  INFO 20740  --- [http-nio-8125-exec-1] ***.TestController   : 
K4,K4[k]:2022-03-29 10:39:53.076,k-测试对象池,下标:7,list:4,活跃:20,空闲:0
K1[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
K1[k]:2022-03-29 10:39:53.076,k-钝化一个对象
K1[k]:2022-03-29 10:39:53.077,k-验证对象是否可用
K1[k]:2022-03-29 10:39:53.077,k-钝化一个对象
K1[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
K1[k]:2022-03-29 10:39:34.759,k-钝化一个对象
K1[k]:2022-03-29 10:39:34.759,k-销毁对象
K1[k]:2022-03-29 10:39:34.759:销毁
K1[k]:2022-03-29 10:39:34.657,k-验证对象是否可用
K1[k]:2022-03-29 10:39:34.657,k-钝化一个对象
K1[k]:2022-03-29 10:39:34.657,k-销毁对象
K1[k]:2022-03-29 10:39:34.657:销毁
K1[k]:2022-03-29 10:39:53.075,k-验证对象是否可用
K1[k]:2022-03-29 10:39:53.075,k-钝化一个对象
K1[k]:2022-03-29 10:39:53.075,k-销毁对象
K1[k]:2022-03-29 10:39:53.075:销毁
K2[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
K2[k]:2022-03-29 10:39:53.076,k-钝化一个对象
K2[k]:2022-03-29 10:39:53.077,k-验证对象是否可用
K2[k]:2022-03-29 10:39:53.077,k-钝化一个对象
K2[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
K2[k]:2022-03-29 10:39:34.759,k-钝化一个对象
K2[k]:2022-03-29 10:39:34.759,k-销毁对象
K2[k]:2022-03-29 10:39:34.759:销毁
K2[k]:2022-03-29 10:39:34.658,k-验证对象是否可用
K2[k]:2022-03-29 10:39:34.658,k-钝化一个对象
K2[k]:2022-03-29 10:39:34.658,k-销毁对象
K2[k]:2022-03-29 10:39:34.658:销毁
K2[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
K2[k]:2022-03-29 10:39:53.076,k-钝化一个对象
K2[k]:2022-03-29 10:39:53.076,k-销毁对象
K2[k]:2022-03-29 10:39:53.076:销毁
K3[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
K3[k]:2022-03-29 10:39:53.076,k-钝化一个对象
K3[k]:2022-03-29 10:39:53.077,k-验证对象是否可用
K3[k]:2022-03-29 10:39:53.077,k-钝化一个对象
K3[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
K3[k]:2022-03-29 10:39:34.759,k-钝化一个对象
K3[k]:2022-03-29 10:39:34.759,k-销毁对象
K3[k]:2022-03-29 10:39:34.759:销毁
K3[k]:2022-03-29 10:39:34.658,k-验证对象是否可用
K3[k]:2022-03-29 10:39:34.658,k-钝化一个对象
K3[k]:2022-03-29 10:39:34.658,k-销毁对象
K3[k]:2022-03-29 10:39:34.658:销毁
K3[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
K3[k]:2022-03-29 10:39:53.076,k-钝化一个对象
K3[k]:2022-03-29 10:39:53.076,k-销毁对象
K3[k]:2022-03-29 10:39:53.076:销毁
K4[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
K4[k]:2022-03-29 10:39:53.076,k-钝化一个对象
K4[k]:2022-03-29 10:39:53.077,k-验证对象是否可用
K4[k]:2022-03-29 10:39:53.077,k-钝化一个对象
K4[k]:2022-03-29 10:39:34.759,k-验证对象是否可用
K4[k]:2022-03-29 10:39:34.759,k-钝化一个对象
K4[k]:2022-03-29 10:39:34.759,k-销毁对象
K4[k]:2022-03-29 10:39:34.759:销毁
K4[k]:2022-03-29 10:39:34.659,k-验证对象是否可用
K4[k]:2022-03-29 10:39:34.659,k-钝化一个对象
K4[k]:2022-03-29 10:39:34.659,k-销毁对象
K4[k]:2022-03-29 10:39:34.659:销毁
K4[k]:2022-03-29 10:39:53.076,k-验证对象是否可用
K4[k]:2022-03-29 10:39:53.076,k-钝化一个对象
K4[k]:2022-03-29 10:39:53.076,k-销毁对象
K4[k]:2022-03-29 10:39:53.076:销毁

项目关闭日志

K1[k]:2022-03-29 10:39:53.077,k-销毁对象
K1[k]:2022-03-29 10:39:53.077:销毁
K1[k]:2022-03-29 10:39:53.076,k-销毁对象
K1[k]:2022-03-29 10:39:53.076:销毁
K2[k]:2022-03-29 10:39:53.077,k-销毁对象
K2[k]:2022-03-29 10:39:53.077:销毁
K2[k]:2022-03-29 10:39:53.076,k-销毁对象
K2[k]:2022-03-29 10:39:53.076:销毁
K3[k]:2022-03-29 10:39:53.077,k-销毁对象
K3[k]:2022-03-29 10:39:53.077:销毁
K3[k]:2022-03-29 10:39:53.076,k-销毁对象
K3[k]:2022-03-29 10:39:53.076:销毁
K4[k]:2022-03-29 10:39:53.077,k-销毁对象
K4[k]:2022-03-29 10:39:53.077:销毁
K4[k]:2022-03-29 10:39:53.076,k-销毁对象
K4[k]:2022-03-29 10:39:53.076:销毁
2022-03-29 10:39:53.073,销毁对象
2022-03-29 10:39:53.073:销毁
2022-03-29 10:39:53.072,销毁对象
2022-03-29 10:39:53.072:销毁
对象池关闭-start
对象池关闭-end

截图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:24:13  更:2022-04-01 00:24:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年3日历 -2025/3/1 7:55:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码