diff --git a/src/main/java/com/jd/platform/async/callback/ICallback.java b/src/main/java/com/jd/platform/async/callback/ICallback.java
index b77189d6c20bb069ae68faed7ce677971ce4ac0c..6d1d8b2900933878136a0de1d2fd2cbf5c94c117 100755
--- a/src/main/java/com/jd/platform/async/callback/ICallback.java
+++ b/src/main/java/com/jd/platform/async/callback/ICallback.java
@@ -6,15 +6,21 @@ import com.jd.platform.async.worker.WorkResult;
/**
* 每个执行单元执行完毕后,会回调该接口
* 需要监听执行结果的,实现该接口即可
+ *
* @author wuweifeng wrote on 2019-11-19.
*/
+@FunctionalInterface
public interface ICallback {
- void begin();
+ /**
+ * 任务开始的监听
+ */
+ default void begin() {
+
+ }
/**
* 耗时操作执行完毕后,就给value注入值
- *
*/
void result(boolean success, T param, WorkResult workResult);
}
diff --git a/src/main/java/com/jd/platform/async/callback/IWorker.java b/src/main/java/com/jd/platform/async/callback/IWorker.java
index d7a16ddef76d28c549b22b72bafa4f3593f60c60..ffe000aa4674c410dd60eba9e75ed629ce3a461e 100755
--- a/src/main/java/com/jd/platform/async/callback/IWorker.java
+++ b/src/main/java/com/jd/platform/async/callback/IWorker.java
@@ -1,25 +1,30 @@
package com.jd.platform.async.callback;
-import com.jd.platform.async.wrapper.WorkerWrapper;
-
import java.util.Map;
+import com.jd.platform.async.wrapper.WorkerWrapper;
+
/**
* 每个最小执行单元需要实现该接口
+ *
* @author wuweifeng wrote on 2019-11-19.
*/
+@FunctionalInterface
public interface IWorker {
/**
* 在这里做耗时操作,如rpc请求、IO等
*
- * @param object
- * object
+ * @param object object
+ * @param allWrappers 任务包装
*/
V action(T object, Map allWrappers);
/**
* 超时、异常时,返回的默认值
+ *
* @return 默认值
*/
- V defaultValue();
+ default V defaultValue() {
+ return null;
+ }
}
diff --git a/src/test/java/depend/LambdaTest.java b/src/test/java/depend/LambdaTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..42c1bb253130dc2a1f7866dd036c55795e8b5516
--- /dev/null
+++ b/src/test/java/depend/LambdaTest.java
@@ -0,0 +1,74 @@
+package depend;
+
+import java.util.Map;
+
+import com.jd.platform.async.executor.Async;
+import com.jd.platform.async.worker.WorkResult;
+import com.jd.platform.async.wrapper.WorkerWrapper;
+
+/**
+ * @author sjsdfg
+ * @since 2020/6/14
+ */
+public class LambdaTest {
+ public static void main(String[] args) throws Exception {
+ WorkerWrapper, String> workerWrapper2 = new WorkerWrapper.Builder, String>()
+ .worker((WorkResult result, Map allWrappers) -> {
+ System.out.println("par2的入参来自于par1: " + result.getResult());
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ return result.getResult().getName();
+ })
+ .callback((boolean success, WorkResult param, WorkResult workResult) ->
+ System.out.println(String.format("thread is %s, param is %s, result is %s", Thread.currentThread().getName(), param, workResult)))
+ .id("third")
+ .build();
+
+ WorkerWrapper, User> workerWrapper1 = new WorkerWrapper.Builder, User>()
+ .worker((WorkResult result, Map allWrappers) -> {
+ System.out.println("par1的入参来自于par0: " + result.getResult());
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ return new User("user1");
+ })
+ .callback((boolean success, WorkResult param, WorkResult workResult) ->
+ System.out.println(String.format("thread is %s, param is %s, result is %s", Thread.currentThread().getName(), param, workResult)))
+ .id("second")
+ .next(workerWrapper2)
+ .build();
+
+ WorkerWrapper workerWrapper = new WorkerWrapper.Builder()
+ .worker((String object, Map allWrappers) -> {
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ return new User("user0");
+ })
+ .param("0")
+ .id("first")
+ .next(workerWrapper1, true)
+ .callback((boolean success, String param, WorkResult workResult) ->
+ System.out.println(String.format("thread is %s, param is %s, result is %s", Thread.currentThread().getName(), param, workResult)))
+ .build();
+
+ //虽然尚未执行,但是也可以先取得结果的引用,作为下一个任务的入参。V1.2前写法,需要手工给
+ //V1.3后,不用给wrapper setParam了,直接在worker的action里自行根据id获取即可.参考dependnew包下代码
+ WorkResult result = workerWrapper.getWorkResult();
+ WorkResult result1 = workerWrapper1.getWorkResult();
+ workerWrapper1.setParam(result);
+ workerWrapper2.setParam(result1);
+
+ Async.beginWork(3500, workerWrapper);
+
+ System.out.println(workerWrapper2.getWorkResult());
+ Async.shutDown();
+ }
+}