java8新的异步编程方式
package com.test.java8;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
/**
* java8新的异步编程方式
*
* @date 2018/12/28 17:17
*/
public class CompletableFutureTest {
public static void main(String[] args) {
supplyAsyncTest();
// runAsyncTest();
}
private static void runAsyncTest() {
System.out.println("<------------------------开始执行------------------------------>");
// 该方式不会执行,
// CompletableFuture.runAsync(() -> {
// for (int i = 0; i < 100; i ++) {
// System.out.println("异步方法1 ==》 " + i);
// }
// });
CompletableFuture<Void> voidCompletableFuture = CompletableFuture.runAsync(() -> {
for (int i = 0; i < 100; i++) {
System.out.println("异步方法1 ==》 " + i);
}
});
CompletableFuture<Void> voidCompletableFuture1 = CompletableFuture.runAsync(() -> {
for (int i = 0; i < 100; i++) {
System.out.println("异步方法2 --> " + i);
}
});
for (int i = 0; i < 100; i++) {
System.out.println("-- 后续操作,get前 --> " + i);
}
try {
Void aVoid = voidCompletableFuture.get();
System.out.println(aVoid);
voidCompletableFuture1.get();
}catch(Exception e){
}
for (int i = 0; i < 100; i++) {
System.out.println("-- 后续操作,get后 --> " + i);
}
System.out.println("<------------------------执行结束------------------------------>");
}
private static void supplyAsyncTest() {
System.out.println("<------------------------开始----有返回值异步方法------------------------------>");
CompletableFuture<List<String>> listCompletableFuture = CompletableFuture.supplyAsync(() -> {
for (int i = 0; i < 100; i++) {
System.out.println("异步方法1 ==》 " + i);
}
return Arrays.asList("a", "b", "c", "d", "e", "f");
});
CompletableFuture<List<String>> listCompletableFuture2 = CompletableFuture.supplyAsync(() -> {
for (int i = 0; i < 100; i++) {
System.out.println("异步方法2 --> " + i);
}
return Arrays.asList("a1", "b1", "c1", "d1", "e1", "f1");
});
for (int i = 0; i < 100; i++) {
System.out.println("-- 后续操作,get前 --> " + i);
}
List<String> strings;
List<String> strings1;
try{
strings = listCompletableFuture.get();
strings1 = listCompletableFuture2.get();
}catch(Exception e){
throw new RuntimeException("执行异常");
}
for (int i = 0; i < 100; i++) {
System.out.println("-- 后续操作,get后 --> " + i);
}
System.out.println(strings);
System.out.println(strings1);
System.out.println("<------------------------执行结束------------------------------>");
}
}