/**
* @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;
}
多线程代码测试
最新推荐文章于 2022-12-09 21:38:09 发布
该博客探讨了在Java中进行多线程测试的方法,通过对比Runnable和Callable任务的使用,展示了如何在多线程环境中获取返回值。代码示例中,作者创建并启动了10个线程,每个线程调用ttsServiceEsbImpl.getShortAudio()方法,并将结果添加到返回列表中。博客还记录了执行这些线程所需的时间。
摘要由CSDN通过智能技术生成