From 099f340a0c28e3bf08aef318de75e62a8fe4c2f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=AC=E4=B8=9C-=E5=B9=B3=E5=8F=B0=E4=B8=9A=E5=8A=A1?= =?UTF-8?q?=E4=B8=AD=E5=BF=83?= <5714087+jd-platform-opensource_admin@user.noreply.gitee.com> Date: Thu, 26 Mar 2020 09:56:55 +0800 Subject: [PATCH 01/11] update README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b7b2681..e996c07 100644 --- a/README.md +++ b/README.md @@ -106,6 +106,6 @@ ## 快速开始 -[点此开启实战](https://gitee.com/tianyalei/asyncTool/blob/master/QuickStart.md) +[点此开启实战](https://gitee.com/jd-platform-opensource/asyncTool/blob/master/QuickStart.md) -- Gitee From 3c3273839a243a8b7aa7b264bc4dc060dc8f8c2d Mon Sep 17 00:00:00 2001 From: tianyaleixiaowu <272551766@qq.com> Date: Mon, 30 Mar 2020 15:26:34 +0800 Subject: [PATCH 02/11] update QuickStart.md. --- QuickStart.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/QuickStart.md b/QuickStart.md index 489a773..214721f 100644 --- a/QuickStart.md +++ b/QuickStart.md @@ -1,5 +1,16 @@ 如果只是需要用这个框架,请往下看即可。如果需要深入了解这个框架是如何一步一步实现的,从接到需求,到每一步的思考,每个类为什么这么设计,为什么有这些方法,也就是如何从0到1开发出这个框架,作者在[csdn开了专栏](https://blog.csdn.net/tianyaleixiaowu/category_9637010.html)专门讲中间件如何从0开发,包括并不限于这个小框架。京东内部同事可在cf上搜索erp也能看到。 +京东同事通过引用如下maven来使用。 + +``` + + com.jd.platform + asyncTool + 1.3.1-SNAPSHOT + +``` +外网不可访问,可通过下载代码打jar包的形式引用 + #### 基本组件 worker: 一个最小的任务执行单元。通常是一个网络调用,或一段耗时操作。 -- Gitee From 3672664370c2f0c8a680f39f029b01f00f895469 Mon Sep 17 00:00:00 2001 From: tianyaleixiaowu <272551766@qq.com> Date: Fri, 3 Apr 2020 11:03:41 +0800 Subject: [PATCH 03/11] update README.md. --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e996c07..7095c0b 100644 --- a/README.md +++ b/README.md @@ -9,7 +9,7 @@ ## 并行常见的场景 1 客户端请求服务端接口,该接口需要调用其他N个微服务的接口 -`譬如 请求我的订单,那么就需要去调用用户的rpc、商品详情的rpc、库存rpc、优惠券等等好多个服务。同时,这些服务还有相互依赖关系,譬如必须先拿到用户的某个字段后,再去某rpc服务请求数据。 最终全部获取完毕后,或超时了,就汇总结果,返回给客户端。` +`譬如 请求我的购物车,那么就需要去调用用户的rpc、商品详情的rpc、库存rpc、优惠券等等好多个服务。同时,这些服务还有相互依赖关系,譬如必须先拿到商品id后,才能去库存rpc服务请求库存信息。 最终全部获取完毕后,或超时了,就汇总结果,返回给客户端。` 2 并行执行N个任务,后续根据这1-N个任务的执行结果来决定是否继续执行下一个任务 -- Gitee From 50180f0c5e2f1598f88cd8fbb9d186ea70111faf Mon Sep 17 00:00:00 2001 From: tianyaleixiaowu <272551766@qq.com> Date: Mon, 27 Apr 2020 16:37:07 +0800 Subject: [PATCH 04/11] update QuickStart.md. --- QuickStart.md | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/QuickStart.md b/QuickStart.md index 214721f..01c8cc9 100644 --- a/QuickStart.md +++ b/QuickStart.md @@ -9,7 +9,29 @@ 1.3.1-SNAPSHOT ``` -外网不可访问,可通过下载代码打jar包的形式引用 +外网请使用jitpack.io上打的包 +先添加repositories节点 + +``` + + + jitpack.io + https://jitpack.io + + +``` +然后添加如下maven依赖 + +``` + + com.gitee.jd-platform-opensource + asyncTool + V1.2-SNAPSHOT + +``` + + + #### 基本组件 worker: 一个最小的任务执行单元。通常是一个网络调用,或一段耗时操作。 -- Gitee From 76b07b51b21a2e8140d761dbdd08e5ba3d26989f Mon Sep 17 00:00:00 2001 From: tianyaleixiaowu <272551766@qq.com> Date: Mon, 11 May 2020 21:53:05 +0800 Subject: [PATCH 05/11] update README.md. --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c85f595..87ca5f9 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -注意,该框架我已转移到公司账号:https://gitee.com/jd-platform-opensource/asyncTool 下。更新时会优先更新公司账号,本账号会不定期同步。 + # 并行框架说明 有问题、或者有特定的场景需求可以给作者发邮件说明,感谢您的意见。wuweifeng10@jd.com, liwangyang@jd.com @@ -7,6 +7,8 @@ 有对区块链感兴趣的,可以参考项目作者另一个[GVP项目](https://gitee.com/tianyalei/md_blockchain),java区块链底层入门。 +有对高并发场景下,被热key打爆存储层,秒杀等场景中热数据本地缓存、热数据(刷子用户)限流等需要热key探测的,可关注[京东热key探测缓存框架](http://https://gitee.com/jd-platform-opensource/hotkey)。热key框架正在灰度内测期,已上线3000台服务器进行灰度。 + ## 并行常见的场景 1 客户端请求服务端接口,该接口需要调用其他N个微服务的接口 @@ -85,6 +87,8 @@ 那么,我的框架也支持这样的场景。可以在编排时,就取A的结果包装类,作为B的入参。虽然此时尚未执行,必然是空,但可以保证A执行完毕后,B的入参会被赋值。 +在V1.3后,框架支持在worker的action的入参Map中获取任意一个执行单元的执行结果,当然,可以取其中的1个、多个执行结果作为自己的入参。Key就是在定义wrapper时通过id传进来的唯一id标识。详情demo可以查看test包下dependnew包案例。 + ## 并发场景可能存在的需求之——全组任务的超时 一组任务,虽然内部的各个执行单元的时间不可控,但是我可以控制全组的执行时间不超过某个值。通过设置timeOut,来控制全组的执行阈值。 -- Gitee From 679890d2e3cd7cb53ca586cea72ad1d5abb472e5 Mon Sep 17 00:00:00 2001 From: tianyaleixiaowu <272551766@qq.com> Date: Mon, 11 May 2020 21:55:34 +0800 Subject: [PATCH 06/11] update QuickStart.md. --- QuickStart.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/QuickStart.md b/QuickStart.md index 01c8cc9..0bbc812 100644 --- a/QuickStart.md +++ b/QuickStart.md @@ -26,7 +26,7 @@ com.gitee.jd-platform-opensource asyncTool - V1.2-SNAPSHOT + V1.3-SNAPSHOT ``` @@ -54,7 +54,7 @@ public interface IWorker { * @param object * object */ - V action(T object); + V action(T object, Map allWrappers); /** * 超时、异常时,返回的默认值 -- Gitee From ea56e4bfd1bf4904475ccd04a0deed3809ed58a8 Mon Sep 17 00:00:00 2001 From: tianyaleixiaowu <272551766@qq.com> Date: Mon, 11 May 2020 22:02:22 +0800 Subject: [PATCH 07/11] update QuickStart.md. --- QuickStart.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/QuickStart.md b/QuickStart.md index 0bbc812..2f54866 100644 --- a/QuickStart.md +++ b/QuickStart.md @@ -292,7 +292,12 @@ public class ParWorker1 implements IWorker, ICallback Date: Tue, 19 May 2020 10:28:19 +0800 Subject: [PATCH 08/11] =?UTF-8?q?=E5=A2=9E=E5=8A=A0lombok=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E3=80=81junit=E6=B5=8B=E8=AF=95=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 29 ++- .../jd/platform/async/worker/WorkResult.java | 63 ++--- .../platform/async/wrapper/WorkerWrapper.java | 6 +- .../depend/{Test.java => DependTests.java} | 14 +- .../{Test.java => DependNewTests.java} | 12 +- .../{TestPar.java => ParallelTests.java} | 215 +++++++++--------- ...stSequential.java => SequentialTests.java} | 19 +- ...meout.java => SequentialTimeoutTests.java} | 11 +- 8 files changed, 198 insertions(+), 171 deletions(-) rename src/test/java/depend/{Test.java => DependTests.java} (86%) rename src/test/java/dependnew/{Test.java => DependNewTests.java} (80%) rename src/test/java/parallel/{TestPar.java => ParallelTests.java} (75%) rename src/test/java/seq/{TestSequential.java => SequentialTests.java} (69%) rename src/test/java/seq/{TestSequentialTimeout.java => SequentialTimeoutTests.java} (87%) diff --git a/pom.xml b/pom.xml index 54adee1..349b945 100644 --- a/pom.xml +++ b/pom.xml @@ -8,15 +8,38 @@ asyncTool 1.3.1-SNAPSHOT + + UTF-8 + 1.8 + 1.18.12 + 4.13 + 3.3 + + + + + org.projectlombok + lombok + ${lombok.version} + provided + + + junit + junit + ${junit.version} + test + + + org.apache.maven.plugins maven-compiler-plugin - 3.3 + ${maven.compiler.plugin.version} - 1.8 - 1.8 + ${jdk.version} + ${jdk.version} diff --git a/src/main/java/com/jd/platform/async/worker/WorkResult.java b/src/main/java/com/jd/platform/async/worker/WorkResult.java index 95e5868..3321a34 100755 --- a/src/main/java/com/jd/platform/async/worker/WorkResult.java +++ b/src/main/java/com/jd/platform/async/worker/WorkResult.java @@ -1,8 +1,15 @@ package com.jd.platform.async.worker; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + /** * 执行结果 */ +@Builder +@Data +@AllArgsConstructor public class WorkResult { /** * 执行的结果 @@ -12,52 +19,28 @@ public class WorkResult { * 结果状态 */ private ResultState resultState; + /** + * 异常信息 + */ private Exception ex; + /** + * 带结果&状态的构造器 + * + * @param result + * @param resultState + */ public WorkResult(V result, ResultState resultState) { this(result, resultState, null); } - public WorkResult(V result, ResultState resultState, Exception ex) { - this.result = result; - this.resultState = resultState; - this.ex = ex; - } - + /** + * 默认结果 + * + * @param + * @return + */ public static WorkResult defaultResult() { - return new WorkResult<>(null, ResultState.DEFAULT); - } - - @Override - public String toString() { - return "WorkResult{" + - "result=" + result + - ", resultState=" + resultState + - ", ex=" + ex + - '}'; - } - - public Exception getEx() { - return ex; - } - - public void setEx(Exception ex) { - this.ex = ex; - } - - public V getResult() { - return result; - } - - public void setResult(V result) { - this.result = result; - } - - public ResultState getResultState() { - return resultState; - } - - public void setResultState(ResultState resultState) { - this.resultState = resultState; + return (WorkResult) WorkResult.builder().result(null).resultState(ResultState.DEFAULT).build(); } } diff --git a/src/main/java/com/jd/platform/async/wrapper/WorkerWrapper.java b/src/main/java/com/jd/platform/async/wrapper/WorkerWrapper.java index 50f1c2b..cb2a546 100755 --- a/src/main/java/com/jd/platform/async/wrapper/WorkerWrapper.java +++ b/src/main/java/com/jd/platform/async/wrapper/WorkerWrapper.java @@ -8,6 +8,7 @@ import com.jd.platform.async.executor.timer.SystemClock; import com.jd.platform.async.worker.DependWrapper; import com.jd.platform.async.worker.ResultState; import com.jd.platform.async.worker.WorkResult; +import lombok.Synchronized; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -215,7 +216,8 @@ public class WorkerWrapper { } } - private synchronized void doDependsJobs(ThreadPoolExecutor poolExecutor, List dependWrappers, WorkerWrapper fromWrapper, long now, long remainTime) { + @Synchronized + private void doDependsJobs(ThreadPoolExecutor poolExecutor, List dependWrappers, WorkerWrapper fromWrapper, long now, long remainTime) { boolean nowDependIsMust = false; //创建必须完成的上游wrapper集合 Set mustWrapper = new HashSet<>(); @@ -451,7 +453,7 @@ public class WorkerWrapper { @Override public boolean equals(Object o) { - if (this == o) { + if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { diff --git a/src/test/java/depend/Test.java b/src/test/java/depend/DependTests.java similarity index 86% rename from src/test/java/depend/Test.java rename to src/test/java/depend/DependTests.java index 6d0baf3..0505d1f 100644 --- a/src/test/java/depend/Test.java +++ b/src/test/java/depend/DependTests.java @@ -3,23 +3,27 @@ package depend; import com.jd.platform.async.executor.Async; import com.jd.platform.async.worker.WorkResult; import com.jd.platform.async.wrapper.WorkerWrapper; +import org.junit.Test; import java.util.concurrent.ExecutionException; /** * 后面请求依赖于前面请求的执行结果 - * @author wuweifeng wrote on 2019-12-26 + * + * @author wuweifeng wrote on 2019-12-26. + * @author tony on 2020-05-19 10:03. * @version 1.0 */ -public class Test { +public class DependTests { - public static void main(String[] args) throws ExecutionException, InterruptedException { + @Test + public void workerDepend() throws ExecutionException, InterruptedException { DeWorker w = new DeWorker(); DeWorker1 w1 = new DeWorker1(); DeWorker2 w2 = new DeWorker2(); - WorkerWrapper, String> workerWrapper2 = new WorkerWrapper.Builder, String>() + WorkerWrapper, String> workerWrapper2 = new WorkerWrapper.Builder, String>() .worker(w2) .callback(w2) .id("third") @@ -48,8 +52,6 @@ public class Test { workerWrapper2.setParam(result1); - - Async.beginWork(3500, workerWrapper); System.out.println(workerWrapper2.getWorkResult()); diff --git a/src/test/java/dependnew/Test.java b/src/test/java/dependnew/DependNewTests.java similarity index 80% rename from src/test/java/dependnew/Test.java rename to src/test/java/dependnew/DependNewTests.java index 731e42b..45e42c6 100644 --- a/src/test/java/dependnew/Test.java +++ b/src/test/java/dependnew/DependNewTests.java @@ -2,23 +2,27 @@ package dependnew; import com.jd.platform.async.executor.Async; import com.jd.platform.async.wrapper.WorkerWrapper; +import org.junit.Test; import java.util.concurrent.ExecutionException; /** * 后面请求依赖于前面请求的执行结果 - * @author wuweifeng wrote on 2019-12-26 + * + * @author wuweifeng wrote on 2019-12-26. + * @author tony. * @version 1.0 */ -public class Test { +public class DependNewTests { - public static void main(String[] args) throws ExecutionException, InterruptedException { + @Test + public void workerDependNew() throws ExecutionException, InterruptedException { DeWorker w = new DeWorker(); DeWorker1 w1 = new DeWorker1(); DeWorker2 w2 = new DeWorker2(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .id("third") diff --git a/src/test/java/parallel/TestPar.java b/src/test/java/parallel/ParallelTests.java similarity index 75% rename from src/test/java/parallel/TestPar.java rename to src/test/java/parallel/ParallelTests.java index 072dcf5..cb05b08 100755 --- a/src/test/java/parallel/TestPar.java +++ b/src/test/java/parallel/ParallelTests.java @@ -4,6 +4,7 @@ package parallel; import com.jd.platform.async.executor.Async; import com.jd.platform.async.executor.timer.SystemClock; import com.jd.platform.async.wrapper.WorkerWrapper; +import org.junit.Test; import java.util.concurrent.ExecutionException; @@ -11,10 +12,13 @@ import java.util.concurrent.ExecutionException; * 并行测试 * * @author wuweifeng wrote on 2019-11-20. + * @author tony. */ @SuppressWarnings("ALL") -public class TestPar { - public static void main(String[] args) throws Exception { +public class ParallelTests { + + @Test + public void workParallel() throws Exception { // testNormal(); // testMulti(); @@ -36,24 +40,24 @@ public class TestPar { /** * 3个并行,测试不同时间的超时 */ - private static void testNormal() throws InterruptedException, ExecutionException { + private void testNormal() throws InterruptedException, ExecutionException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -79,24 +83,24 @@ public class TestPar { * 0---1 * 2 */ - private static void testMulti() throws ExecutionException, InterruptedException { + private void testMulti() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -119,25 +123,25 @@ public class TestPar { * 0---1 * 2 */ - private static void testMultiReverse() throws ExecutionException, InterruptedException { + private void testMultiReverse() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .depend(workerWrapper) .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") @@ -161,24 +165,24 @@ public class TestPar { * 0---1 * 2 */ - private static void testMultiError() throws ExecutionException, InterruptedException { + private void testMultiError() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -198,37 +202,37 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2都完成后3 - * 1 + * 1 * 0 3 - * 2 + * 2 */ - private static void testMulti3() throws ExecutionException, InterruptedException { + private void testMulti3() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); ParWorker3 w3 = new ParWorker3(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -251,37 +255,37 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2都完成后3 - * 1 + * 1 * 0 3 - * 2 + * 2 */ - private static void testMulti3Reverse() throws ExecutionException, InterruptedException { + private void testMulti3Reverse() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); ParWorker3 w3 = new ParWorker3(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .depend(workerWrapper) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .depend(workerWrapper) .build(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") @@ -305,13 +309,13 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2都完成后3,2耗时2秒,1耗时1秒。3会等待2完成 - * 1 + * 1 * 0 3 - * 2 - * + * 2 + *

* 执行结果0,1,2,3 */ - private static void testMulti4() throws ExecutionException, InterruptedException { + private void testMulti4() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); @@ -320,27 +324,27 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -366,13 +370,13 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2都完成后3,2耗时2秒,1耗时1秒。3会等待2完成 - * 1 + * 1 * 0 3 - * 2 - * + * 2 + *

* 执行结果0,1,2,3 */ - private static void testMulti4Reverse() throws ExecutionException, InterruptedException { + private void testMulti4Reverse() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); @@ -381,19 +385,19 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") .build(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") @@ -401,7 +405,7 @@ public class TestPar { .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") @@ -428,15 +432,15 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2 任何一个执行完后,都执行3 - * 1 + * 1 * 0 3 - * 2 - * + * 2 + *

* 则结果是: * 0,2,3,1 * 2,3分别是500、400.3执行完毕后,1才执行完 */ - private static void testMulti5() throws ExecutionException, InterruptedException { + private void testMulti5() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); @@ -446,27 +450,27 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); w3.setSleepTime(400); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .next(workerWrapper3, false) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .next(workerWrapper3, false) .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -489,15 +493,15 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2 任何一个执行完后,都执行3 - * 1 + * 1 * 0 3 - * 2 - * + * 2 + *

* 则结果是: * 0,2,3,1 * 2,3分别是500、400.3执行完毕后,1才执行完 */ - private static void testMulti5Reverse() throws ExecutionException, InterruptedException { + private void testMulti5Reverse() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); @@ -507,19 +511,19 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); w3.setSleepTime(400); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") .build(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") @@ -527,7 +531,7 @@ public class TestPar { .next(workerWrapper3, false) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") @@ -536,7 +540,6 @@ public class TestPar { .build(); - long now = SystemClock.now(); System.out.println("begin-" + now); @@ -552,16 +555,16 @@ public class TestPar { /** * 0执行完,同时1和2, 必须1执行完毕后,才能执行3. 无论2是否领先1完毕,都要等1 - * 1 + * 1 * 0 3 - * 2 - * + * 2 + *

* 则结果是: * 0,2,1,3 - * + *

* 2,3分别是500、400.2执行完了,1没完,那就等着1完毕,才能3 */ - private static void testMulti6() throws ExecutionException, InterruptedException { + private void testMulti6() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); @@ -571,28 +574,28 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); w3.setSleepTime(400); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); //设置2不是必须,1是必须的 - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper0 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper0 = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -615,12 +618,12 @@ public class TestPar { /** * 两个0并行,上面0执行完,同时1和2, 下面0执行完开始1,上面的 必须1、2执行完毕后,才能执行3. 最后必须2、3都完成,才能4 - * 1 + * 1 * 0 3 - * 2 4 + * 2 4 * --------- * 0 1 2 - * + *

* 则结果是: * callback worker0 success--1577242870969----result = 1577242870968---param = 00 from 0-threadName:Thread-1 * callback worker0 success--1577242870969----result = 1577242870968---param = 0 from 0-threadName:Thread-0 @@ -631,20 +634,20 @@ public class TestPar { * callback worker3 success--1577242872977----result = 1577242872977---param = 3 from 3-threadName:Thread-2 * callback worker4 success--1577242873980----result = 1577242873980---param = 4 from 3-threadName:Thread-2 */ - private static void testMulti7() throws ExecutionException, InterruptedException { + private void testMulti7() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); ParWorker3 w3 = new ParWorker3(); ParWorker4 w4 = new ParWorker4(); - WorkerWrapper workerWrapper4 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper4 = new WorkerWrapper.Builder() .worker(w4) .callback(w4) .param("4") .build(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") @@ -652,7 +655,7 @@ public class TestPar { .build(); //下面的2 - WorkerWrapper workerWrapper22 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper22 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("22") @@ -660,7 +663,7 @@ public class TestPar { .build(); //下面的1 - WorkerWrapper workerWrapper11 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper11 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("11") @@ -668,7 +671,7 @@ public class TestPar { .build(); //下面的0 - WorkerWrapper workerWrapper00 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper00 = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("00") @@ -676,7 +679,7 @@ public class TestPar { .build(); //上面的1 - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") @@ -684,7 +687,7 @@ public class TestPar { .build(); //上面的2 - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") @@ -692,7 +695,7 @@ public class TestPar { .build(); //上面的0 - WorkerWrapper workerWrapper0 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper0 = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -715,10 +718,10 @@ public class TestPar { /** * a1 -> b -> c * a2 -> b -> c - * + *

* b、c */ - private static void testMulti8() throws ExecutionException, InterruptedException { + private void testMulti8() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); w1.setSleepTime(1005); @@ -728,26 +731,26 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); w3.setSleepTime(1000); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("c") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("b") .next(workerWrapper3) .build(); - WorkerWrapper workerWrappera1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrappera1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("a1") .next(workerWrapper2) .build(); - WorkerWrapper workerWrappera2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrappera2 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("a2") @@ -761,11 +764,11 @@ public class TestPar { /** * w1 -> w2 -> w3 - * --- last + * --- last * w * w1和w并行,w执行完后就执行last,此时b、c还没开始,b、c就不需要执行了 */ - private static void testMulti9() throws ExecutionException, InterruptedException { + private void testMulti9() throws ExecutionException, InterruptedException { ParWorker1 w1 = new ParWorker1(); //注意这里,如果w1的执行时间比w长,那么w2和w3肯定不走。 如果w1和w执行时间一样长,多运行几次,会发现w2有时走有时不走 // w1.setSleepTime(1100); @@ -775,34 +778,34 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); ParWorker4 w4 = new ParWorker4(); - WorkerWrapper last = new WorkerWrapper.Builder() + WorkerWrapper last = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("last") .build(); - WorkerWrapper wrapperW = new WorkerWrapper.Builder() + WorkerWrapper wrapperW = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("w") .next(last, false) .build(); - WorkerWrapper wrapperW3 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("w3") .next(last, false) .build(); - WorkerWrapper wrapperW2 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("w2") .next(wrapperW3) .build(); - WorkerWrapper wrapperW1 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("w1") @@ -815,11 +818,11 @@ public class TestPar { /** * w1 -> w2 -> w3 - * --- last + * --- last * w * w1和w并行,w执行完后就执行last,此时b、c还没开始,b、c就不需要执行了 */ - private static void testMulti9Reverse() throws ExecutionException, InterruptedException { + private void testMulti9Reverse() throws ExecutionException, InterruptedException { ParWorker1 w1 = new ParWorker1(); //注意这里,如果w1的执行时间比w长,那么w2和w3肯定不走。 如果w1和w执行时间一样长,多运行几次,会发现w2有时走有时不走 // w1.setSleepTime(1100); @@ -829,33 +832,33 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); ParWorker4 w4 = new ParWorker4(); - WorkerWrapper wrapperW1 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("w1") .build(); - WorkerWrapper wrapperW = new WorkerWrapper.Builder() + WorkerWrapper wrapperW = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("w") .build(); - WorkerWrapper last = new WorkerWrapper.Builder() + WorkerWrapper last = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("last") .depend(wrapperW) .build(); - WorkerWrapper wrapperW2 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("w2") .depend(wrapperW1) .build(); - WorkerWrapper wrapperW3 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("w3") diff --git a/src/test/java/seq/TestSequential.java b/src/test/java/seq/SequentialTests.java similarity index 69% rename from src/test/java/seq/TestSequential.java rename to src/test/java/seq/SequentialTests.java index d4e1c67..0af17a8 100755 --- a/src/test/java/seq/TestSequential.java +++ b/src/test/java/seq/SequentialTests.java @@ -4,15 +4,20 @@ package seq; import com.jd.platform.async.executor.Async; import com.jd.platform.async.executor.timer.SystemClock; import com.jd.platform.async.wrapper.WorkerWrapper; +import org.junit.Test; import java.util.concurrent.ExecutionException; /** * 串行测试 + * * @author wuweifeng wrote on 2019-11-20. + * @author tony. */ -public class TestSequential { - public static void main(String[] args) throws InterruptedException, ExecutionException { +public class SequentialTests { + + @Test + public void workSequential() throws InterruptedException, ExecutionException { SeqWorker w = new SeqWorker(); @@ -20,20 +25,20 @@ public class TestSequential { SeqWorker2 w2 = new SeqWorker2(); //顺序0-1-2 - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .next(workerWrapper2) .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -45,7 +50,7 @@ public class TestSequential { testGroupTimeout(workerWrapper); } - private static void testNormal(WorkerWrapper workerWrapper) throws ExecutionException, InterruptedException { + private void testNormal(WorkerWrapper workerWrapper) throws ExecutionException, InterruptedException { long now = SystemClock.now(); System.out.println("begin-" + now); @@ -57,7 +62,7 @@ public class TestSequential { Async.shutDown(); } - private static void testGroupTimeout(WorkerWrapper workerWrapper) throws ExecutionException, InterruptedException { + private void testGroupTimeout(WorkerWrapper workerWrapper) throws ExecutionException, InterruptedException { long now = SystemClock.now(); System.out.println("begin-" + now); diff --git a/src/test/java/seq/TestSequentialTimeout.java b/src/test/java/seq/SequentialTimeoutTests.java similarity index 87% rename from src/test/java/seq/TestSequentialTimeout.java rename to src/test/java/seq/SequentialTimeoutTests.java index f2b02de..f699458 100755 --- a/src/test/java/seq/TestSequentialTimeout.java +++ b/src/test/java/seq/SequentialTimeoutTests.java @@ -4,16 +4,21 @@ package seq; import com.jd.platform.async.executor.Async; import com.jd.platform.async.executor.timer.SystemClock; import com.jd.platform.async.wrapper.WorkerWrapper; +import org.junit.Test; import java.util.concurrent.ExecutionException; /** * 串行测试 + * * @author wuweifeng wrote on 2019-11-20. + * @author tony */ @SuppressWarnings("Duplicates") -public class TestSequentialTimeout { - public static void main(String[] args) throws InterruptedException, ExecutionException { +public class SequentialTimeoutTests { + + @Test + public void sequentialTimeout() throws InterruptedException, ExecutionException { testFirstTimeout(); } @@ -25,7 +30,7 @@ public class TestSequentialTimeout { * end-1576719451338 * cost-862 */ - private static void testFirstTimeout() throws ExecutionException, InterruptedException { + private void testFirstTimeout() throws ExecutionException, InterruptedException { SeqWorker1 w1 = new SeqWorker1(); SeqWorker2 w2 = new SeqWorker2(); SeqTimeoutWorker t = new SeqTimeoutWorker(); -- Gitee From 3f54130d158bd1ee005f7de1324af72e51fba585 Mon Sep 17 00:00:00 2001 From: whq46936 Date: Tue, 25 Aug 2020 16:19:29 +0800 Subject: [PATCH 09/11] =?UTF-8?q?:sparkles:=20=E5=A2=9E=E5=8A=A0lombok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/test/java/depend/User.java | 26 +++++++------------------- src/test/java/dependnew/User.java | 24 +++++------------------- 3 files changed, 13 insertions(+), 39 deletions(-) diff --git a/pom.xml b/pom.xml index 349b945..a14a708 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ 1.8 1.18.12 4.13 - 3.3 + 3.8.1 diff --git a/src/test/java/depend/User.java b/src/test/java/depend/User.java index dfd6277..e1f88a1 100644 --- a/src/test/java/depend/User.java +++ b/src/test/java/depend/User.java @@ -1,29 +1,17 @@ package depend; +import lombok.AllArgsConstructor; +import lombok.Data; + /** * 一个包装类 + * * @author wuweifeng wrote on 2019-12-26 * @version 1.0 */ +@Data +@AllArgsConstructor public class User { - private String name; - - public User(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override - public String toString() { - return "User{" + - "name='" + name + '\'' + - '}'; - } + private String name; } diff --git a/src/test/java/dependnew/User.java b/src/test/java/dependnew/User.java index bbef801..476ebd0 100644 --- a/src/test/java/dependnew/User.java +++ b/src/test/java/dependnew/User.java @@ -1,29 +1,15 @@ package dependnew; +import lombok.AllArgsConstructor; +import lombok.Data; + /** * 一个包装类 * @author wuweifeng wrote on 2019-12-26 * @version 1.0 */ +@Data +@AllArgsConstructor public class User { private String name; - - public User(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public String toString() { - return "User{" + - "name='" + name + '\'' + - '}'; - } } -- Gitee From 1ba893a7ffe0c81baef65cc5777a304a4ee158d5 Mon Sep 17 00:00:00 2001 From: whq46936 Date: Tue, 19 May 2020 10:28:19 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E5=A2=9E=E5=8A=A0lombok=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E3=80=81junit=E6=B5=8B=E8=AF=95=E7=A4=BA=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 29 ++- .../jd/platform/async/worker/WorkResult.java | 63 ++--- .../platform/async/wrapper/WorkerWrapper.java | 6 +- .../depend/{Test.java => DependTests.java} | 14 +- .../{Test.java => DependNewTests.java} | 12 +- .../{TestPar.java => ParallelTests.java} | 215 +++++++++--------- ...stSequential.java => SequentialTests.java} | 19 +- ...meout.java => SequentialTimeoutTests.java} | 11 +- 8 files changed, 198 insertions(+), 171 deletions(-) rename src/test/java/depend/{Test.java => DependTests.java} (86%) rename src/test/java/dependnew/{Test.java => DependNewTests.java} (80%) rename src/test/java/parallel/{TestPar.java => ParallelTests.java} (75%) rename src/test/java/seq/{TestSequential.java => SequentialTests.java} (69%) rename src/test/java/seq/{TestSequentialTimeout.java => SequentialTimeoutTests.java} (87%) diff --git a/pom.xml b/pom.xml index 54adee1..349b945 100644 --- a/pom.xml +++ b/pom.xml @@ -8,15 +8,38 @@ asyncTool 1.3.1-SNAPSHOT + + UTF-8 + 1.8 + 1.18.12 + 4.13 + 3.3 + + + + + org.projectlombok + lombok + ${lombok.version} + provided + + + junit + junit + ${junit.version} + test + + + org.apache.maven.plugins maven-compiler-plugin - 3.3 + ${maven.compiler.plugin.version} - 1.8 - 1.8 + ${jdk.version} + ${jdk.version} diff --git a/src/main/java/com/jd/platform/async/worker/WorkResult.java b/src/main/java/com/jd/platform/async/worker/WorkResult.java index 95e5868..3321a34 100755 --- a/src/main/java/com/jd/platform/async/worker/WorkResult.java +++ b/src/main/java/com/jd/platform/async/worker/WorkResult.java @@ -1,8 +1,15 @@ package com.jd.platform.async.worker; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; + /** * 执行结果 */ +@Builder +@Data +@AllArgsConstructor public class WorkResult { /** * 执行的结果 @@ -12,52 +19,28 @@ public class WorkResult { * 结果状态 */ private ResultState resultState; + /** + * 异常信息 + */ private Exception ex; + /** + * 带结果&状态的构造器 + * + * @param result + * @param resultState + */ public WorkResult(V result, ResultState resultState) { this(result, resultState, null); } - public WorkResult(V result, ResultState resultState, Exception ex) { - this.result = result; - this.resultState = resultState; - this.ex = ex; - } - + /** + * 默认结果 + * + * @param + * @return + */ public static WorkResult defaultResult() { - return new WorkResult<>(null, ResultState.DEFAULT); - } - - @Override - public String toString() { - return "WorkResult{" + - "result=" + result + - ", resultState=" + resultState + - ", ex=" + ex + - '}'; - } - - public Exception getEx() { - return ex; - } - - public void setEx(Exception ex) { - this.ex = ex; - } - - public V getResult() { - return result; - } - - public void setResult(V result) { - this.result = result; - } - - public ResultState getResultState() { - return resultState; - } - - public void setResultState(ResultState resultState) { - this.resultState = resultState; + return (WorkResult) WorkResult.builder().result(null).resultState(ResultState.DEFAULT).build(); } } diff --git a/src/main/java/com/jd/platform/async/wrapper/WorkerWrapper.java b/src/main/java/com/jd/platform/async/wrapper/WorkerWrapper.java index 50f1c2b..cb2a546 100755 --- a/src/main/java/com/jd/platform/async/wrapper/WorkerWrapper.java +++ b/src/main/java/com/jd/platform/async/wrapper/WorkerWrapper.java @@ -8,6 +8,7 @@ import com.jd.platform.async.executor.timer.SystemClock; import com.jd.platform.async.worker.DependWrapper; import com.jd.platform.async.worker.ResultState; import com.jd.platform.async.worker.WorkResult; +import lombok.Synchronized; import java.util.*; import java.util.concurrent.CompletableFuture; @@ -215,7 +216,8 @@ public class WorkerWrapper { } } - private synchronized void doDependsJobs(ThreadPoolExecutor poolExecutor, List dependWrappers, WorkerWrapper fromWrapper, long now, long remainTime) { + @Synchronized + private void doDependsJobs(ThreadPoolExecutor poolExecutor, List dependWrappers, WorkerWrapper fromWrapper, long now, long remainTime) { boolean nowDependIsMust = false; //创建必须完成的上游wrapper集合 Set mustWrapper = new HashSet<>(); @@ -451,7 +453,7 @@ public class WorkerWrapper { @Override public boolean equals(Object o) { - if (this == o) { + if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { diff --git a/src/test/java/depend/Test.java b/src/test/java/depend/DependTests.java similarity index 86% rename from src/test/java/depend/Test.java rename to src/test/java/depend/DependTests.java index 6d0baf3..0505d1f 100644 --- a/src/test/java/depend/Test.java +++ b/src/test/java/depend/DependTests.java @@ -3,23 +3,27 @@ package depend; import com.jd.platform.async.executor.Async; import com.jd.platform.async.worker.WorkResult; import com.jd.platform.async.wrapper.WorkerWrapper; +import org.junit.Test; import java.util.concurrent.ExecutionException; /** * 后面请求依赖于前面请求的执行结果 - * @author wuweifeng wrote on 2019-12-26 + * + * @author wuweifeng wrote on 2019-12-26. + * @author tony on 2020-05-19 10:03. * @version 1.0 */ -public class Test { +public class DependTests { - public static void main(String[] args) throws ExecutionException, InterruptedException { + @Test + public void workerDepend() throws ExecutionException, InterruptedException { DeWorker w = new DeWorker(); DeWorker1 w1 = new DeWorker1(); DeWorker2 w2 = new DeWorker2(); - WorkerWrapper, String> workerWrapper2 = new WorkerWrapper.Builder, String>() + WorkerWrapper, String> workerWrapper2 = new WorkerWrapper.Builder, String>() .worker(w2) .callback(w2) .id("third") @@ -48,8 +52,6 @@ public class Test { workerWrapper2.setParam(result1); - - Async.beginWork(3500, workerWrapper); System.out.println(workerWrapper2.getWorkResult()); diff --git a/src/test/java/dependnew/Test.java b/src/test/java/dependnew/DependNewTests.java similarity index 80% rename from src/test/java/dependnew/Test.java rename to src/test/java/dependnew/DependNewTests.java index 731e42b..45e42c6 100644 --- a/src/test/java/dependnew/Test.java +++ b/src/test/java/dependnew/DependNewTests.java @@ -2,23 +2,27 @@ package dependnew; import com.jd.platform.async.executor.Async; import com.jd.platform.async.wrapper.WorkerWrapper; +import org.junit.Test; import java.util.concurrent.ExecutionException; /** * 后面请求依赖于前面请求的执行结果 - * @author wuweifeng wrote on 2019-12-26 + * + * @author wuweifeng wrote on 2019-12-26. + * @author tony. * @version 1.0 */ -public class Test { +public class DependNewTests { - public static void main(String[] args) throws ExecutionException, InterruptedException { + @Test + public void workerDependNew() throws ExecutionException, InterruptedException { DeWorker w = new DeWorker(); DeWorker1 w1 = new DeWorker1(); DeWorker2 w2 = new DeWorker2(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .id("third") diff --git a/src/test/java/parallel/TestPar.java b/src/test/java/parallel/ParallelTests.java similarity index 75% rename from src/test/java/parallel/TestPar.java rename to src/test/java/parallel/ParallelTests.java index 072dcf5..cb05b08 100755 --- a/src/test/java/parallel/TestPar.java +++ b/src/test/java/parallel/ParallelTests.java @@ -4,6 +4,7 @@ package parallel; import com.jd.platform.async.executor.Async; import com.jd.platform.async.executor.timer.SystemClock; import com.jd.platform.async.wrapper.WorkerWrapper; +import org.junit.Test; import java.util.concurrent.ExecutionException; @@ -11,10 +12,13 @@ import java.util.concurrent.ExecutionException; * 并行测试 * * @author wuweifeng wrote on 2019-11-20. + * @author tony. */ @SuppressWarnings("ALL") -public class TestPar { - public static void main(String[] args) throws Exception { +public class ParallelTests { + + @Test + public void workParallel() throws Exception { // testNormal(); // testMulti(); @@ -36,24 +40,24 @@ public class TestPar { /** * 3个并行,测试不同时间的超时 */ - private static void testNormal() throws InterruptedException, ExecutionException { + private void testNormal() throws InterruptedException, ExecutionException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -79,24 +83,24 @@ public class TestPar { * 0---1 * 2 */ - private static void testMulti() throws ExecutionException, InterruptedException { + private void testMulti() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -119,25 +123,25 @@ public class TestPar { * 0---1 * 2 */ - private static void testMultiReverse() throws ExecutionException, InterruptedException { + private void testMultiReverse() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .depend(workerWrapper) .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") @@ -161,24 +165,24 @@ public class TestPar { * 0---1 * 2 */ - private static void testMultiError() throws ExecutionException, InterruptedException { + private void testMultiError() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -198,37 +202,37 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2都完成后3 - * 1 + * 1 * 0 3 - * 2 + * 2 */ - private static void testMulti3() throws ExecutionException, InterruptedException { + private void testMulti3() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); ParWorker3 w3 = new ParWorker3(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -251,37 +255,37 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2都完成后3 - * 1 + * 1 * 0 3 - * 2 + * 2 */ - private static void testMulti3Reverse() throws ExecutionException, InterruptedException { + private void testMulti3Reverse() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); ParWorker3 w3 = new ParWorker3(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .depend(workerWrapper) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .depend(workerWrapper) .build(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") @@ -305,13 +309,13 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2都完成后3,2耗时2秒,1耗时1秒。3会等待2完成 - * 1 + * 1 * 0 3 - * 2 - * + * 2 + *

* 执行结果0,1,2,3 */ - private static void testMulti4() throws ExecutionException, InterruptedException { + private void testMulti4() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); @@ -320,27 +324,27 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -366,13 +370,13 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2都完成后3,2耗时2秒,1耗时1秒。3会等待2完成 - * 1 + * 1 * 0 3 - * 2 - * + * 2 + *

* 执行结果0,1,2,3 */ - private static void testMulti4Reverse() throws ExecutionException, InterruptedException { + private void testMulti4Reverse() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); @@ -381,19 +385,19 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") .build(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") @@ -401,7 +405,7 @@ public class TestPar { .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") @@ -428,15 +432,15 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2 任何一个执行完后,都执行3 - * 1 + * 1 * 0 3 - * 2 - * + * 2 + *

* 则结果是: * 0,2,3,1 * 2,3分别是500、400.3执行完毕后,1才执行完 */ - private static void testMulti5() throws ExecutionException, InterruptedException { + private void testMulti5() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); @@ -446,27 +450,27 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); w3.setSleepTime(400); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .next(workerWrapper3, false) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .next(workerWrapper3, false) .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -489,15 +493,15 @@ public class TestPar { /** * 0执行完,同时1和2, 1\2 任何一个执行完后,都执行3 - * 1 + * 1 * 0 3 - * 2 - * + * 2 + *

* 则结果是: * 0,2,3,1 * 2,3分别是500、400.3执行完毕后,1才执行完 */ - private static void testMulti5Reverse() throws ExecutionException, InterruptedException { + private void testMulti5Reverse() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); @@ -507,19 +511,19 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); w3.setSleepTime(400); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") .build(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") @@ -527,7 +531,7 @@ public class TestPar { .next(workerWrapper3, false) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") @@ -536,7 +540,6 @@ public class TestPar { .build(); - long now = SystemClock.now(); System.out.println("begin-" + now); @@ -552,16 +555,16 @@ public class TestPar { /** * 0执行完,同时1和2, 必须1执行完毕后,才能执行3. 无论2是否领先1完毕,都要等1 - * 1 + * 1 * 0 3 - * 2 - * + * 2 + *

* 则结果是: * 0,2,1,3 - * + *

* 2,3分别是500、400.2执行完了,1没完,那就等着1完毕,才能3 */ - private static void testMulti6() throws ExecutionException, InterruptedException { + private void testMulti6() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); @@ -571,28 +574,28 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); w3.setSleepTime(400); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") .build(); //设置2不是必须,1是必须的 - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .next(workerWrapper3) .build(); - WorkerWrapper workerWrapper0 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper0 = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -615,12 +618,12 @@ public class TestPar { /** * 两个0并行,上面0执行完,同时1和2, 下面0执行完开始1,上面的 必须1、2执行完毕后,才能执行3. 最后必须2、3都完成,才能4 - * 1 + * 1 * 0 3 - * 2 4 + * 2 4 * --------- * 0 1 2 - * + *

* 则结果是: * callback worker0 success--1577242870969----result = 1577242870968---param = 00 from 0-threadName:Thread-1 * callback worker0 success--1577242870969----result = 1577242870968---param = 0 from 0-threadName:Thread-0 @@ -631,20 +634,20 @@ public class TestPar { * callback worker3 success--1577242872977----result = 1577242872977---param = 3 from 3-threadName:Thread-2 * callback worker4 success--1577242873980----result = 1577242873980---param = 4 from 3-threadName:Thread-2 */ - private static void testMulti7() throws ExecutionException, InterruptedException { + private void testMulti7() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); ParWorker2 w2 = new ParWorker2(); ParWorker3 w3 = new ParWorker3(); ParWorker4 w4 = new ParWorker4(); - WorkerWrapper workerWrapper4 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper4 = new WorkerWrapper.Builder() .worker(w4) .callback(w4) .param("4") .build(); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("3") @@ -652,7 +655,7 @@ public class TestPar { .build(); //下面的2 - WorkerWrapper workerWrapper22 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper22 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("22") @@ -660,7 +663,7 @@ public class TestPar { .build(); //下面的1 - WorkerWrapper workerWrapper11 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper11 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("11") @@ -668,7 +671,7 @@ public class TestPar { .build(); //下面的0 - WorkerWrapper workerWrapper00 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper00 = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("00") @@ -676,7 +679,7 @@ public class TestPar { .build(); //上面的1 - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") @@ -684,7 +687,7 @@ public class TestPar { .build(); //上面的2 - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") @@ -692,7 +695,7 @@ public class TestPar { .build(); //上面的0 - WorkerWrapper workerWrapper0 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper0 = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -715,10 +718,10 @@ public class TestPar { /** * a1 -> b -> c * a2 -> b -> c - * + *

* b、c */ - private static void testMulti8() throws ExecutionException, InterruptedException { + private void testMulti8() throws ExecutionException, InterruptedException { ParWorker w = new ParWorker(); ParWorker1 w1 = new ParWorker1(); w1.setSleepTime(1005); @@ -728,26 +731,26 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); w3.setSleepTime(1000); - WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("c") .build(); - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("b") .next(workerWrapper3) .build(); - WorkerWrapper workerWrappera1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrappera1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("a1") .next(workerWrapper2) .build(); - WorkerWrapper workerWrappera2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrappera2 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("a2") @@ -761,11 +764,11 @@ public class TestPar { /** * w1 -> w2 -> w3 - * --- last + * --- last * w * w1和w并行,w执行完后就执行last,此时b、c还没开始,b、c就不需要执行了 */ - private static void testMulti9() throws ExecutionException, InterruptedException { + private void testMulti9() throws ExecutionException, InterruptedException { ParWorker1 w1 = new ParWorker1(); //注意这里,如果w1的执行时间比w长,那么w2和w3肯定不走。 如果w1和w执行时间一样长,多运行几次,会发现w2有时走有时不走 // w1.setSleepTime(1100); @@ -775,34 +778,34 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); ParWorker4 w4 = new ParWorker4(); - WorkerWrapper last = new WorkerWrapper.Builder() + WorkerWrapper last = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("last") .build(); - WorkerWrapper wrapperW = new WorkerWrapper.Builder() + WorkerWrapper wrapperW = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("w") .next(last, false) .build(); - WorkerWrapper wrapperW3 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("w3") .next(last, false) .build(); - WorkerWrapper wrapperW2 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("w2") .next(wrapperW3) .build(); - WorkerWrapper wrapperW1 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("w1") @@ -815,11 +818,11 @@ public class TestPar { /** * w1 -> w2 -> w3 - * --- last + * --- last * w * w1和w并行,w执行完后就执行last,此时b、c还没开始,b、c就不需要执行了 */ - private static void testMulti9Reverse() throws ExecutionException, InterruptedException { + private void testMulti9Reverse() throws ExecutionException, InterruptedException { ParWorker1 w1 = new ParWorker1(); //注意这里,如果w1的执行时间比w长,那么w2和w3肯定不走。 如果w1和w执行时间一样长,多运行几次,会发现w2有时走有时不走 // w1.setSleepTime(1100); @@ -829,33 +832,33 @@ public class TestPar { ParWorker3 w3 = new ParWorker3(); ParWorker4 w4 = new ParWorker4(); - WorkerWrapper wrapperW1 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("w1") .build(); - WorkerWrapper wrapperW = new WorkerWrapper.Builder() + WorkerWrapper wrapperW = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("w") .build(); - WorkerWrapper last = new WorkerWrapper.Builder() + WorkerWrapper last = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("last") .depend(wrapperW) .build(); - WorkerWrapper wrapperW2 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("w2") .depend(wrapperW1) .build(); - WorkerWrapper wrapperW3 = new WorkerWrapper.Builder() + WorkerWrapper wrapperW3 = new WorkerWrapper.Builder() .worker(w3) .callback(w3) .param("w3") diff --git a/src/test/java/seq/TestSequential.java b/src/test/java/seq/SequentialTests.java similarity index 69% rename from src/test/java/seq/TestSequential.java rename to src/test/java/seq/SequentialTests.java index d4e1c67..0af17a8 100755 --- a/src/test/java/seq/TestSequential.java +++ b/src/test/java/seq/SequentialTests.java @@ -4,15 +4,20 @@ package seq; import com.jd.platform.async.executor.Async; import com.jd.platform.async.executor.timer.SystemClock; import com.jd.platform.async.wrapper.WorkerWrapper; +import org.junit.Test; import java.util.concurrent.ExecutionException; /** * 串行测试 + * * @author wuweifeng wrote on 2019-11-20. + * @author tony. */ -public class TestSequential { - public static void main(String[] args) throws InterruptedException, ExecutionException { +public class SequentialTests { + + @Test + public void workSequential() throws InterruptedException, ExecutionException { SeqWorker w = new SeqWorker(); @@ -20,20 +25,20 @@ public class TestSequential { SeqWorker2 w2 = new SeqWorker2(); //顺序0-1-2 - WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper2 = new WorkerWrapper.Builder() .worker(w2) .callback(w2) .param("2") .build(); - WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper1 = new WorkerWrapper.Builder() .worker(w1) .callback(w1) .param("1") .next(workerWrapper2) .build(); - WorkerWrapper workerWrapper = new WorkerWrapper.Builder() + WorkerWrapper workerWrapper = new WorkerWrapper.Builder() .worker(w) .callback(w) .param("0") @@ -45,7 +50,7 @@ public class TestSequential { testGroupTimeout(workerWrapper); } - private static void testNormal(WorkerWrapper workerWrapper) throws ExecutionException, InterruptedException { + private void testNormal(WorkerWrapper workerWrapper) throws ExecutionException, InterruptedException { long now = SystemClock.now(); System.out.println("begin-" + now); @@ -57,7 +62,7 @@ public class TestSequential { Async.shutDown(); } - private static void testGroupTimeout(WorkerWrapper workerWrapper) throws ExecutionException, InterruptedException { + private void testGroupTimeout(WorkerWrapper workerWrapper) throws ExecutionException, InterruptedException { long now = SystemClock.now(); System.out.println("begin-" + now); diff --git a/src/test/java/seq/TestSequentialTimeout.java b/src/test/java/seq/SequentialTimeoutTests.java similarity index 87% rename from src/test/java/seq/TestSequentialTimeout.java rename to src/test/java/seq/SequentialTimeoutTests.java index f2b02de..f699458 100755 --- a/src/test/java/seq/TestSequentialTimeout.java +++ b/src/test/java/seq/SequentialTimeoutTests.java @@ -4,16 +4,21 @@ package seq; import com.jd.platform.async.executor.Async; import com.jd.platform.async.executor.timer.SystemClock; import com.jd.platform.async.wrapper.WorkerWrapper; +import org.junit.Test; import java.util.concurrent.ExecutionException; /** * 串行测试 + * * @author wuweifeng wrote on 2019-11-20. + * @author tony */ @SuppressWarnings("Duplicates") -public class TestSequentialTimeout { - public static void main(String[] args) throws InterruptedException, ExecutionException { +public class SequentialTimeoutTests { + + @Test + public void sequentialTimeout() throws InterruptedException, ExecutionException { testFirstTimeout(); } @@ -25,7 +30,7 @@ public class TestSequentialTimeout { * end-1576719451338 * cost-862 */ - private static void testFirstTimeout() throws ExecutionException, InterruptedException { + private void testFirstTimeout() throws ExecutionException, InterruptedException { SeqWorker1 w1 = new SeqWorker1(); SeqWorker2 w2 = new SeqWorker2(); SeqTimeoutWorker t = new SeqTimeoutWorker(); -- Gitee From f2f3a6af99f1056debca9d6c715f02694e9317b9 Mon Sep 17 00:00:00 2001 From: whq46936 Date: Tue, 25 Aug 2020 16:19:29 +0800 Subject: [PATCH 11/11] =?UTF-8?q?:sparkles:=20=E5=A2=9E=E5=8A=A0lombok?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 2 +- src/test/java/depend/User.java | 26 +++++++------------------- src/test/java/dependnew/User.java | 24 +++++------------------- 3 files changed, 13 insertions(+), 39 deletions(-) diff --git a/pom.xml b/pom.xml index 349b945..a14a708 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,7 @@ 1.8 1.18.12 4.13 - 3.3 + 3.8.1 diff --git a/src/test/java/depend/User.java b/src/test/java/depend/User.java index dfd6277..e1f88a1 100644 --- a/src/test/java/depend/User.java +++ b/src/test/java/depend/User.java @@ -1,29 +1,17 @@ package depend; +import lombok.AllArgsConstructor; +import lombok.Data; + /** * 一个包装类 + * * @author wuweifeng wrote on 2019-12-26 * @version 1.0 */ +@Data +@AllArgsConstructor public class User { - private String name; - - public User(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - @Override - public String toString() { - return "User{" + - "name='" + name + '\'' + - '}'; - } + private String name; } diff --git a/src/test/java/dependnew/User.java b/src/test/java/dependnew/User.java index bbef801..476ebd0 100644 --- a/src/test/java/dependnew/User.java +++ b/src/test/java/dependnew/User.java @@ -1,29 +1,15 @@ package dependnew; +import lombok.AllArgsConstructor; +import lombok.Data; + /** * 一个包装类 * @author wuweifeng wrote on 2019-12-26 * @version 1.0 */ +@Data +@AllArgsConstructor public class User { private String name; - - public User(String name) { - this.name = name; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public String toString() { - return "User{" + - "name='" + name + '\'' + - '}'; - } } -- Gitee