diff --git a/asyncTool-core/src/main/java/com/jd/platform/async/executor/Async.java b/asyncTool-core/src/main/java/com/jd/platform/async/executor/Async.java index 7c66de957fd7e9bbb663a4960809c27d23aa679f..1ed954c8dac1916c8844ab157d12fb39bc424ffc 100644 --- a/asyncTool-core/src/main/java/com/jd/platform/async/executor/Async.java +++ b/asyncTool-core/src/main/java/com/jd/platform/async/executor/Async.java @@ -136,9 +136,18 @@ public class Async { //任务结束就退出检查 if (onceWork.isFinish()) { break; - } else if (onceWork.getAllThreadSubmit().stream().allMatch(future -> future.isDone() || future.isCancelled())) { - //完成或者取消就及时取消任务 - if (!onceWork.isCancelled() && !onceWork.isWaitingCancel()) { + } else if (onceWork.getAllThreadSubmit().stream().allMatch(future -> future.isCancelled() || future.isDone())) { + //等5秒再去操作 + long startTime = SystemClock.now(); + long now = SystemClock.now(); + while (TimeUnit.SECONDS.toMillis(5) > now - startTime) { + now = SystemClock.now(); + } + //未超时、未完成或者未取消就取消任务 + if (!(onceWork.hasTimeout() + && onceWork.isFinish() + && onceWork.isCancelled() + && onceWork.isWaitingCancel())) { onceWork.pleaseCancel(); } break; diff --git a/asyncTool-core/src/test/java/v15/cases/Case15.java b/asyncTool-core/src/test/java/v15/cases/Case15.java index be1d99745ff3d029d163c794bed2f8edd50d73e3..09b99d67b4e9774e5b163a5b9744249bc698a5d3 100644 --- a/asyncTool-core/src/test/java/v15/cases/Case15.java +++ b/asyncTool-core/src/test/java/v15/cases/Case15.java @@ -69,7 +69,7 @@ class Case15 { ) .build(); try { - OnceWork work = Async.work(5000, a, d); + OnceWork work = Async.work(10000, a, d); ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 1, 60, TimeUnit.SECONDS, new ArrayBlockingQueue<>(1)); pool.execute(() -> { @@ -95,8 +95,12 @@ class Case15 { } System.out.println("cost:" + (SystemClock.now() - now)); + int count=1; while (build.getWorkResult().getEx() == null) { //同步等待result数据写入 + if(count++>800){ + break; + } } System.out.println("输出H节点的结果----" + build.getWorkResult()); /* 输出: