package com.star.multiThread;
import java.util.concurrent.*;
public class FutureTest {
public static void main(String[] args) throws ExecutionException, InterruptedException {
// testCompletableFuture1();
testCompletableFuture2();
testCompletableFuture3();
}
// FutureTask
private static void testCompletableFuture1() throws InterruptedException, ExecutionException {
ExecutorService executorService = Executors.newFixedThreadPool(10);
FutureTask<String> futureTask = new FutureTask<>(new Callable<String>() {
@Override
public String call() throws Exception {
return "success";
}
});
executorService.submit(futureTask);
String str = futureTask.get();
System.out.println(str + "success");
}
// 自定义线程池,优化CompletableFuture
public static void testCompletableFuture2() throws ExecutionException, InterruptedException {
ExecutorService executorService = Executors.newFixedThreadPool(10);
CompletableFuture<String> medalInfoCompletableFuture = CompletableFuture.supplyAsync(() -> {
return "success";
},
executorService)
.exceptionally(throwable -> "Throwable exception message:" + throwable.getMessage());
String str = medalInfoCompletableFuture.get();
System.out.println(str + "success");
}
//CompletableFuture+thenCombine
// 一个线程计算奇数和,一个线程计算偶数和,main线程将他们相加
public static void testCompletableFuture3() throws ExecutionException, InterruptedException {
CompletableFuture<Integer> oddNumber = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 1 + 3 + 5 + 7 + 9;
});
CompletableFuture<Integer> evenNumber = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return 2 + 4 + 6 + 8;
});
long startTime = System.currentTimeMillis();
CompletableFuture<Integer> resultFuturn = oddNumber.thenCombine(evenNumber, (odd, even) -> {
return odd + even;
});
System.out.println("运行结果是:" + resultFuturn.get() + " 总共耗时:" + (System.currentTimeMillis() - startTime) + "毫秒");
}
}