多线程代码测试

该博客探讨了在Java中进行多线程测试的方法,通过对比Runnable和Callable任务的使用,展示了如何在多线程环境中获取返回值。代码示例中,作者创建并启动了10个线程,每个线程调用ttsServiceEsbImpl.getShortAudio()方法,并将结果添加到返回列表中。博客还记录了执行这些线程所需的时间。
摘要由CSDN通过智能技术生成
    /**
     * @apiNote 多线程测试
     * @since 2022/4/13 16:54
     */
    @RequestMapping( value = "/textThread" )
    @ResponseBody
    public List<Object> textThread() {

        List<Object> list = new ArrayList<>();
        Map<String, Object> model = new HashMap<>();
        model.put("audioName", "测试");
        model.put("sampleRate", "16000");
        model.put("appId", "415E6932C6DC3FF434BB7765D1D852C1");
        model.put("text", "国家统计局公布了第七次全国人口普查数据结果,虽然之前行业内一直关注人口老龄化问题。");
        Map<String, Object> maps = new HashMap<String, Object>();
        maps.put("voiceId", "62360");
        maps.put("spd", "-100");
        model.put("extendParams", maps);

//        // 使用runable测试,没有返回值
//        for ( int i = 0; i < 10; i++ ) {
//            // 创建并启动线程
//            new Thread(() -> {
//                String message = Thread.currentThread().getName() + " --:" + ttsServiceEsbImpl.getShortAudio(model);
//                list.add(message);// message内获取不到目标方法的返回值
//                System.out.println(message);
//            }, "MyThread-" + i).start();
//        }

        long startTime = System.currentTimeMillis();
        // 使用callable进行测试,有返回值
        for ( int i = 0; i < 10; i++ ) {
            // 创建线程任务
            FutureTask<String> futureTask = new FutureTask<>(() -> {
                return Thread.currentThread().getName() + " --:" + ttsServiceEsbImpl.getShortAudio(model).toString();
            });
            // 执行线程
            new Thread(futureTask, "MyThread-" + i).start();
            try {
                // 获取返回值
                list.add(futureTask.get());
            } catch ( Exception e ) {
                e.printStackTrace();
            }
        }
        long endTime = System.currentTimeMillis();

//        // synchronized  216783  207346 || lock.lock(); 206668
//        System.out.println("运行50个线程,所花时间:" + (endTime-startTime));
        // synchronized 42211 41571 38487 37612 35955 42394
        // lock.lock();  9984 9617 9754 9147 43848 9808 9049 9122 9535 8682
        System.out.println("运行10个线程,所花时间:" + (endTime-startTime));
//        // synchronized 1554
//        System.out.println("运行1个线程,所花时间:" + (endTime-startTime));

        return list;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秋枫萧竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值