前言:以往我们测试并发就是for循环创建线程,去跑程序,但那真的是在模拟并发环境吗?其实并不是,并发环境的真实场景应该是多个线程同时跑,同时就很重要。
我结合java函数编程写了如下测试类,仅供参考。
package com.delicacy.oatmeal.idworker;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;
/**
* 并发测试工具类
*
* @author zyt
* @create 2018-04-27 18:56
**/
public class ConcurrentTestUtil {
private static final int THREADNUM = 100;
public static <T> void test(T t,Consumer<T> consumer,int threadNum){
CountDownLatch countDownLatch = new CountDownLatch(threadNum);
for (int i=0;i<threadNum;i++){
new Thread(()->{
try {
countDownLatch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
consumer.accept(t);
}).start();
countDownLatch.countDown();
}
}
public static <T> void test(T t,Consumer<T> consumer){
test(t,consumer,THREADNUM);
}
}
@Test
public void contextLoads() {
ConcurrentTestUtil.test(new IdWorker(1), s -> {
System.out.println(s.nextId());
}, 10000);
}
本文介绍了一种使用Java函数编程实现的并发测试工具类。通过CountDownLatch协调多个线程同步启动,确保所有线程同时开始执行任务,从而更真实地模拟并发环境。提供了具体的测试示例。

1万+

被折叠的 条评论
为什么被折叠?



