packagecom.visy.utils;importlombok.extern.slf4j.Slf4j;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.Future;/**
* @author visy.wang
* @date 2024/8/7 14:26
*/@Slf4jpublicclassMultiThreadRunnerTest{//初始化多线程运行器//必须调用build()才能完成内部线程池的创建privatestaticfinalMultiThreadRunner multiThreadRunner =MultiThreadRunner.builder().prefix("test").corePoolSize(5).maxPoolSize(8).capacity(10).build();publicstaticvoidmain(String[] args)throwsException{List<Integer> list =newArrayList<>();for(int i=0; i<20; i++){
list.add(i);}System.out.println("执行单个异步任务(无返回)");
multiThreadRunner.runAsync(()->{System.out.println(66);}).get();System.out.println("等待单个异步任务执行完毕(无返回)");
multiThreadRunner.awaitRunAsync(()->{System.out.println(77);});System.out.println("执行单个异步任务(有返回)");System.out.println(multiThreadRunner.supplyAsync(()->88).get());System.out.println("等待单个异步任务执行完毕(有返回)");System.out.println(multiThreadRunner.awaitSupplyAsync(()->99));System.out.println("执行多个异步任务(无返回)");for(Future<Void> future : multiThreadRunner.runAsync(list, i ->System.out.print((i +1)+";"))){
future.get();}System.out.println("\n等待多个异步任务执行完毕(无返回)");
multiThreadRunner.awaitRunAsync(list, i ->System.out.print((i+2)+";"));System.out.println("\n执行多个异步任务(有返回)");List<Future<Integer>> futures = multiThreadRunner.supplyAsync(list, i -> i+3);for(Future<Integer> future : futures){System.out.print(future.get()+";");}System.out.println("\n等待多个异步任务执行完毕(有返回)");
multiThreadRunner.awaitSupplyAsync(list, i -> i+4).forEach(i ->{System.out.print(i+";");});//关闭任务执行器(注意:关闭后不能再执行任何任务)
multiThreadRunner.shutdown();System.out.println("\n关闭后执行任务");
multiThreadRunner.awaitRunAsync(()->{System.out.println(999);});}}
3.打印结果
执行单个异步任务(无返回)
66
等待单个异步任务执行完毕(无返回)
77
执行单个异步任务(有返回)
88
等待单个异步任务执行完毕(有返回)
99
执行多个异步任务(无返回)
3;1;5;6;2;8;9;11;7;4;15;12;14;13;10;19;18;17;16;20;
等待多个异步任务执行完毕(无返回)
2;3;6;8;5;4;11;10;9;7;16;15;13;12;20;21;19;14;18;17;
执行多个异步任务(有返回)
3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;
等待多个异步任务执行完毕(有返回)
4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;
关闭后执行任务
Exception in thread "main"java.util.concurrent.RejectedExecutionException:Taskjava.util.concurrent.CompletableFuture$AsyncRun@22f71333 rejected from java.util.concurrent.ThreadPoolExecutor@13969fbe[Terminated, pool size =0, active threads =0, queued tasks =0, completed tasks =84]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2063)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:830)
at java.util.concurrent.ThreadPoolExecutor.execute(ThreadPoolExecutor.java:1379)
at java.util.concurrent.CompletableFuture.asyncRunStage(CompletableFuture.java:1654)
at java.util.concurrent.CompletableFuture.runAsync(CompletableFuture.java:1871)
at com.server.utils.MultiThreadRunner.runAsync(MultiThreadRunner.java:173)
at com.server.utils.MultiThreadRunner.awaitRunAsync(MultiThreadRunner.java:222)
at com.server.utils.MultiThreadRunnerTest.main(MultiThreadRunnerTest.java:69)Process finished withexit code 1