From 3506f16fa3082ee665744d35c79104be75032e39 Mon Sep 17 00:00:00 2001 From: xiangwb Date: Sat, 10 Feb 2018 15:57:01 +0800 Subject: [PATCH] merge --- .../main/java/com/xwbing/demo/LambdaDemo.java | 21 ++++++++++--------- .../src/main/java/com/xwbing/demo/demo.java | 5 +++-- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/boot-service/src/main/java/com/xwbing/demo/LambdaDemo.java b/boot-service/src/main/java/com/xwbing/demo/LambdaDemo.java index 1e33407..99ea1e4 100644 --- a/boot-service/src/main/java/com/xwbing/demo/LambdaDemo.java +++ b/boot-service/src/main/java/com/xwbing/demo/LambdaDemo.java @@ -87,20 +87,21 @@ public class LambdaDemo { } /** - * 遍历集合,集合里数据还要进行复杂操作,导致速度很慢,可以用异步(无法保证顺序) + * 遍历集合,集合里数据还要进行复杂操作,导致速度很慢,可以用异步 */ - public List supplyAsync() { - List list = getList(); + public List supplyAsync() { + List list = new ArrayList<>(); + for (int i = 0; i < 100; i++) { + list.add(i); + } int size = list.size(); CompletableFuture[] futures = new CompletableFuture[size]; - List finalList = new ArrayList<>(); + List finalList = new ArrayList<>(); for (int i = 0; i < size; i++) { - JSONObject object = list.get(i); - if (object != null) { - futures[i] = CompletableFuture.supplyAsync(() -> finalList.add(setData(object)), taskExecutor); - } else { - futures[i] = CompletableFuture.runAsync(() -> System.out.println("null")); - } + finalList.add(null);//必须有这步,否则会下标越界 + Integer integer = list.get(i); + final int pos = i; + futures[i] = CompletableFuture.supplyAsync(() -> finalList.set(pos, integer));//按原来顺序存 } CompletableFuture.allOf(futures).join();//线程等待,效果等同于get(),会拋出CompletionException // CompletableFuture completableFuture = CompletableFuture.allOf(futures); diff --git a/boot-service/src/main/java/com/xwbing/demo/demo.java b/boot-service/src/main/java/com/xwbing/demo/demo.java index 8e0f4a8..66136af 100644 --- a/boot-service/src/main/java/com/xwbing/demo/demo.java +++ b/boot-service/src/main/java/com/xwbing/demo/demo.java @@ -17,12 +17,13 @@ public class demo { for (int i = 0; i < 100; i++) { list.add(i); } - List finalList = new ArrayList<>(); int size = list.size(); CompletableFuture[] futures = new CompletableFuture[size]; + List finalList = new ArrayList<>(); for (int i = 0; i < size; i++) { Integer integer = list.get(i); - futures[i] = CompletableFuture.supplyAsync(() -> finalList.add(integer)); + int finalI = i; + futures[i] = CompletableFuture.supplyAsync(() -> finalList.set(finalI, integer)); } CompletableFuture.allOf(futures).join(); System.out.println(finalList);