首页 > 编程语言 >Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了

Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了

时间:2023-04-09 10:32:38浏览次数:42  
标签:Java SpringBoot 对象 mqttPool mqtt Test new 多线程

如何阻止 Java SpringBoot Test 单元测试中包括多线程时,没跑完就结束了
使用 CountDownLatch
CountDownLatch、CyclicBarrier 使用区别多线程 ThreadPoolTaskExecutor 应用
Java BasePooledObjectFactory 对象池化技术

@SpringBootTest
public class PoolTest {

    @Test
    void basePooledTest() throws InterruptedException {

        AtomicInteger atomicInteger = new AtomicInteger();

        int excutorCount = 15;
        CountDownLatch countDownLatch = new CountDownLatch(excutorCount);

        // =====================创建线程池=====================
        ExecutorService excutor = Executors.newFixedThreadPool(5);
        // =====================创建对象池=====================
        // 对象池工厂
        MqttConnectionFactory personPoolFactory = new MqttConnectionFactory();
        // 对象池配置
        GenericObjectPoolConfig<MqttConnection> objectPoolConfig = new GenericObjectPoolConfig<>();
        objectPoolConfig.setMaxTotal(50);
        // 对象池
        GenericObjectPool<MqttConnection> mqttPool = new GenericObjectPool<>(personPoolFactory, objectPoolConfig);
        // =====================测试对象池=====================
        // 循环100次,从线程池中取多个多线程执行任务,来测试对象池
        for (int i = 0; i < excutorCount; i++) {
            excutor.submit(new Thread(() -> {
                // 模拟从对象池取出对象,执行任务
                MqttConnection mqtt = null;
                try {
                    // 从对象池取出对象
                    mqtt = mqttPool.borrowObject();
                    // 让对象工作
                    int count = atomicInteger.addAndGet(1);
                    mqtt.publish("Id:" + count + " Time: " + DateUtil.now());
                } catch (Exception e) {
                    e.printStackTrace();
                } finally {
                    // 回收对象到对象池
                    if (mqtt != null) {
                        mqttPool.returnObject(mqtt);
                    }
                    countDownLatch.countDown();
                }
            }));
        }
        countDownLatch.await();
    }
}



标签:Java,SpringBoot,对象,mqttPool,mqtt,Test,new,多线程
From: https://blog.51cto.com/u_15116285/6178529

相关文章

  • java面向对象编程-三大特性
    面向对象三大特性封装该露的露,该藏的藏我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。封装(数据的隐藏)通常,应禁止直接访问一个对象中数据的实际表示,而应通过数据接口来访问,这称为信......
  • 【Java 并发】【十】【JUC数据结构】【一】CopyOnWriteArrayList原理
    1 前言我们前面看过了volatile、synchronized以及AQS的底层原理,以及基于AQS之上构建的各种并发工具,ReentrantLock、CountDownLatch、Semaphore、CyclicBarrier,那么我们这节该看什么了,是不是要看运用了。在日常的业务编程中经常使用到的内存数据结构有:Map、Set、List、Queue系列......
  • JavaWeb-jsp-19课-JSP语法-2023-04-08
    <%@pagecontentType="text/html;charset=UTF-8"language="java"%><html><head><title>$Title$</title></head><body><%--注释JSP带百分号--%><%=newjava.util.Date()%>&l......
  • C++多核多线程同步实现
    使用MakefileC++11工程模拟dsp的多核同步逻辑,使用多线程模拟多核,多个线程通过C++11的条件变量实现同步。当某一线程执行到同步函数syn_func时,判断是否其他线程执行到此处了,若有其他线程没有执行到此处,本线程就应阻塞。当最后一个线程执行到同步函数时,通知所有线程解除阻塞,实现......
  • Java: Course1
    面向对象和面向过程的区别:面向过程:(如C语言)根据需要分析步骤,将这些函数根据步骤叠加起来,一个套着一个,一直到需求全部实现,如果需求在代码实现之后变更,几乎需要全部重新进行程序设计,代码的维护性比较差.类似炒饭,将所有的原料全部混合,不容易单独的删除其中某个部分.面向对......
  • Java: Course2
    一.static的使用:1.修饰变量:(静态变量)可以在对象之间共享值2.修饰函数(静态函数)被static修饰过的函数只能调用被static修饰过的变量或方法,不能以任何方式引用this或super。被static修饰的变量或函数也可以添加权限修饰符(private,public..)。此外,static方法必须被实现,不......
  • java -- 异常处理、Collection、Iterator迭代器、泛型
    异常处理Java异常处理的五个关键字:try、catch、finally、throw、throws抛出异常throw在编写程序时,我们必须要考虑程序出现问题的情况当调用方法使用接受到的参数时,首先需要先对参数数据进行合法的判断,数据若不合法,就应该告诉调用者,传递合法的数据进来。这时需要使用抛出异常的......
  • windows下无法访问静态图片,报错java.net.UnknownHostException
    如果你是这种方式映射静态文件的,那可以继续看下去了@Value("${prop.me.hddir}")privateStringhddir;privatevoidaddstatic(ResourceHandlerRegistryregistry){Stringdir=hddir+"/static/";log.info("启动加资源路径...addResourceHa......
  • Java笔记(14) UDP通讯程序Demo
    实现一个简单的UDP通信程序,仅作为笔记使用网络编程中有三要素:IP、端口号和通信协议,分别用来确定对方在互联网上的地址、指定接受数据的软件和确定数据在网络中传输的规则。IP地址IP地址分为IPv4地址和IPv6地址,这里不做讨论。IPv4地址中分为公网地址(万维网使用)和私有地址(局......
  • Day02 - JavaScript + CSS Clock
    Day02-JavaScript+CSSClock作者:©liyuechun简介第二天的练习是用JS+CSS模拟时钟效果。效果如下:实现以上模拟时钟的效果,大致思路和解决方案如下:分别获取到当前时间的时、分、秒。通过时分秒对一圈360度,进行映射,确定每一个指针所需旋转的角度。通过CSS的transform:rotate(deg),......