diff --git a/QuickStart.md b/QuickStart.md index 489a773a8e2bb8212c15f6bcc04c9054e8d471cb..2f548668cf9bdc04e28509bd5f1813c143d1830b 100644 --- a/QuickStart.md +++ b/QuickStart.md @@ -1,5 +1,38 @@ 如果只是需要用这个框架,请往下看即可。如果需要深入了解这个框架是如何一步一步实现的,从接到需求,到每一步的思考,每个类为什么这么设计,为什么有这些方法,也就是如何从0到1开发出这个框架,作者在[csdn开了专栏](https://blog.csdn.net/tianyaleixiaowu/category_9637010.html)专门讲中间件如何从0开发,包括并不限于这个小框架。京东内部同事可在cf上搜索erp也能看到。 +京东同事通过引用如下maven来使用。 + +``` + + com.jd.platform + asyncTool + 1.3.1-SNAPSHOT + +``` +外网请使用jitpack.io上打的包 +先添加repositories节点 + +``` + + + jitpack.io + https://jitpack.io + + +``` +然后添加如下maven依赖 + +``` + + com.gitee.jd-platform-opensource + asyncTool + V1.3-SNAPSHOT + +``` + + + + #### 基本组件 worker: 一个最小的任务执行单元。通常是一个网络调用,或一段耗时操作。 @@ -21,7 +54,7 @@ public interface IWorker { * @param object * object */ - V action(T object); + V action(T object, Map allWrappers); /** * 超时、异常时,返回的默认值 @@ -259,7 +292,12 @@ public class ParWorker1 implements IWorker, ICallback中获取任意一个执行单元的执行结果,当然,可以取其中的1个、多个执行结果作为自己的入参。Key就是在定义wrapper时通过id传进来的唯一id标识。详情demo可以查看test包下dependnew包案例。 + ## 并发场景可能存在的需求之——全组任务的超时 一组任务,虽然内部的各个执行单元的时间不可控,但是我可以控制全组的执行时间不超过某个值。通过设置timeOut,来控制全组的执行阈值。 @@ -108,6 +112,6 @@ ## 快速开始 -[点此开启实战](https://gitee.com/tianyalei/asyncTool/blob/master/QuickStart.md) +[点此开启实战](https://gitee.com/jd-platform-opensource/asyncTool/blob/master/QuickStart.md) diff --git a/pom.xml b/pom.xml index 54adee1c83a6b91098885286d38838dcfac23a46..a14a708030be44aaf1f1ea11d3c046b6b0f9320f 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.8.1 + + + + + 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 95e5868bbfffbbf6516df5eb5e5b3a2db3a1b8ff..3321a3480d91e24319c799d4d90b98ebb51d9362 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 50f1c2b7d1bbc32b0711c82d4798b904c901b576..cb2a546ce3713eca96d86cf0c6e8785e7a5237cc 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 6d0baf33a911c125eb6d5b1aca92c04dcf0f05f2..0505d1fe37edbd52ff67e6ccd7623f3fba30a4e6 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/depend/User.java b/src/test/java/depend/User.java index dfd6277e4180b3c53f0a051e96e0e4cf2b1aa330..e1f88a18a22229336546e1a4a04f4d3f0c411afa 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/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 731e42b787054e7930c99875292fb37067c1a631..45e42c607e176aea28a2753e3ab9f167d2d2e8db 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/dependnew/User.java b/src/test/java/dependnew/User.java index bbef801120e9ede1c404d210a96407a0155bd17b..476ebd0cb38e0ae0335fdfeb2585fb34e3f2ca02 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 + '\'' + - '}'; - } } 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 072dcf52629e80252e8ea6186f15847a01f1d20d..cb05b08e6210a122f8a0991d76d6ff5b1cd54b67 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 d4e1c6734034057a02b88d9ccfb47e5bbda4f10b..0af17a8c8b45a6df73b349e6e2abbe52b08d5069 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 f2b02dec5ca95a8507ab34f2dc6c0ec0087e07bb..f699458afa9a1508a94c1a5ddfe62a6be752f7fa 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();