package com.example.demo.Executor;
import java.util.ArrayList;
import java.util.concurrent.*;
public class ExecutorTest {
public static void test1() throws Exception{
ExecutorService executorService = Executors.newCachedThreadPool();
ArrayList<Future<String>> futureArrayList = new ArrayList<>();
System.out.println("公司讓你通知大家聚餐 你開車去接人");
Future<String> future10 = executorService.submit(() -> {
System.out.println("總裁:我在家上大号 我最近拉肚子比較慢 要蹲1個小時才能出來 你等會來接我吧");
TimeUnit.SECONDS.sleep(10);
System.out.println("總裁:1小時了 我上完大号了。你來接吧");
return "總裁上完大号了";
});
futureArrayList.add(future10);
Future<String> future3 = executorService.submit(() -> {
System.out.println("研發:我在家上大号 我比較快 要蹲3分鐘就可以出來 你等會來接我吧");
TimeUnit.SECONDS.sleep(3);
System.out.println("研發:3分鐘 我上完大号了。你來接吧");
return "研發上完大号了";
});
futureArrayList.add(future3);
Future<String> future6 = executorService.submit(() -> {
System.out.println("中層管理:我在家上大号 要蹲10分鐘就可以出來 你等會來接我吧");
TimeUnit.SECONDS.sleep(6);
System.out.println("中層管理:10分鐘 我上完大号了。你來接吧");
return "中層管理上完大号了";
});
futureArrayList.add(future6);
TimeUnit.SECONDS.sleep(1);
System.out.println("都通知完了,等着接吧。");
try {
for (Future<String> future : futureArrayList) {
String returnStr = future.get();
System.out.println(returnStr + ",你去接他");
}
Thread.currentThread().join();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void test2() throws Exception {
ExecutorService executorService = Executors.newCachedThreadPool();
ExecutorCompletionService<String> completionService = new ExecutorCompletionService<>(executorService);
System.out.println("公司讓你通知大家聚餐 你開車去接人");
completionService.submit(() -> {
System.out.println("總裁:我在家上大号 我最近拉肚子比較慢 要蹲1個小時才能出來 你等會來接我吧");
TimeUnit.SECONDS.sleep(10);
System.out.println("總裁:1小時了 我上完大号了。你來接吧");
return "總裁上完大号了";
});
completionService.submit(() -> {
System.out.println("研發:我在家上大号 我比較快 要蹲3分鐘就可以出來 你等會來接我吧");
TimeUnit.SECONDS.sleep(3);
System.out.println("研發:3分鐘 我上完大号了。你來接吧");
return "研發上完大号了";
});
completionService.submit(() -> {
System.out.println("中層管理:我在家上大号 要蹲10分鐘就可以出來 你等會來接我吧");
TimeUnit.SECONDS.sleep(6);
System.out.println("中層管理:10分鐘 我上完大号了。你來接吧");
return "中層管理上完大号了";
});
TimeUnit.SECONDS.sleep(1);
System.out.println("都通知完了,等着接吧。");
//送出了3個異步任務)
for (int i = 0; i < 3; i++) {
String returnStr = completionService.take().get();
System.out.println(returnStr + ",你去接他");
}
Thread.currentThread().join();
}
public static void main(String[] args) {
try {
test1();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("-----------------------------------------------------------");
// try {
// test2();
// } catch (Exception e) {
// e.printStackTrace();
// }
}
}