diff --git a/CHANGELOG.md b/CHANGELOG.md
index eba4a2309..f82930309 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,6 +10,7 @@
### 🐞Bug修复
* 【db 】 修复Oracle下别名错误造成的SQL语法啊错误(issue#I3VTQW@Gitee)
+* 【core 】 修复ConcurrencyTester重复使用时开始测试未清空之前任务的问题(issue#I3VSDO@Gitee)
-------------------------------------------------------------------------------------------------------------
diff --git a/hutool-core/src/main/java/cn/hutool/core/thread/ConcurrencyTester.java b/hutool-core/src/main/java/cn/hutool/core/thread/ConcurrencyTester.java
index 252294a70..9b53d4f34 100644
--- a/hutool-core/src/main/java/cn/hutool/core/thread/ConcurrencyTester.java
+++ b/hutool-core/src/main/java/cn/hutool/core/thread/ConcurrencyTester.java
@@ -37,6 +37,8 @@ public class ConcurrencyTester {
* @return this
*/
public ConcurrencyTester test(Runnable runnable) {
+ this.sf.clearWorker();
+
timeInterval.start();
this.sf//
.addRepeatWorker(runnable)//
@@ -47,6 +49,23 @@ public class ConcurrencyTester {
return this;
}
+ /**
+ * 重置测试器,重置包括:
+ *
+ *
+ * - 清空worker
+ * - 重置计时器
+ *
+ *
+ * @return this
+ * @since 5.7.2
+ */
+ public ConcurrencyTester reset(){
+ this.sf.clearWorker();
+ this.timeInterval.restart();
+ return this;
+ }
+
/**
* 获取执行时间
*
diff --git a/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java b/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java
index 8207b5aa8..18ad5fad5 100644
--- a/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java
+++ b/hutool-core/src/main/java/cn/hutool/core/thread/SyncFinisher.java
@@ -197,6 +197,9 @@ public class SyncFinisher {
}
}
+ /**
+ * 任务内容
+ */
public abstract void work();
}
}
diff --git a/hutool-core/src/test/java/cn/hutool/core/thread/ConcurrencyTesterTest.java b/hutool-core/src/test/java/cn/hutool/core/thread/ConcurrencyTesterTest.java
index 9a8fa2588..d6d1a0f20 100644
--- a/hutool-core/src/test/java/cn/hutool/core/thread/ConcurrencyTesterTest.java
+++ b/hutool-core/src/test/java/cn/hutool/core/thread/ConcurrencyTesterTest.java
@@ -1,10 +1,10 @@
package cn.hutool.core.thread;
-import org.junit.Ignore;
-import org.junit.Test;
-
+import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.RandomUtil;
+import org.junit.Ignore;
+import org.junit.Test;
public class ConcurrencyTesterTest {
@@ -18,4 +18,19 @@ public class ConcurrencyTesterTest {
});
Console.log(tester.getInterval());
}
+
+ @Test
+ @Ignore
+ public void multiTest(){
+ ConcurrencyTester ct = new ConcurrencyTester(5);
+ for(int i=0;i<3;i++){
+ Console.log("开始执行第{}个",i);
+ ct.test(() -> {
+ // 需要并发测试的业务代码
+ Console.log("当前执行线程:" + Thread.currentThread().getName()+" 产生时间 "+ DateUtil.now());
+ ThreadUtil.sleep(RandomUtil.randomInt(1000, 3000));
+ });
+ }
+ Console.log("全部线程执行完毕 "+DateUtil.now());
+ }
}