场景:有一个list,需要循环list每一条数据,分别去查询数据并且最终组装到list,为了提高性能,提高接口响应速度,下面用CompletableFuture实现多线程循环组装数据
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
/**
* @author: jqw
* @version: 1.0.0
* @description:
* @date Date: 2023年01月17日 15:57:00
*/
public class CompletableTest {
public static void main(String[] args) {
long start = System.currentTimeMillis();
List<CompletableFuture<?>> futureAll = new ArrayList<>();
for (int i = 0; i < 10; i++) {
int index = i;
futureAll.add(CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(2000);
System.out.println("线程:CompletableFuture" + Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
return index;
}));
}
//等待全部执行完成
CompletableFuture.allOf(futureAll.toArray(new CompletableFuture[0])).join();
//获取内容
for (CompletableFuture future : futureAll) {
try {
Object s = future.get();
System.out.println(s);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
long end = System.currentTimeMillis();
System.out.println("主线程:" + Thread.currentThread().getName());
System.out.println("运行时间:" + (end - start));
}
}