import com.atguigu.common.utils.R; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.ThreadPoolExecutor; @RestController @RequestMapping("/product/thread") public class ThreadTestController { @Autowired private ThreadPoolExecutor threadPoolExecutor; @RequestMapping("/test") public R test() throws Exception { long start = System.currentTimeMillis(); //第一步,异步执行:没有返回值 CompletableFuture<String> main = CompletableFuture.supplyAsync(() -> { try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("执行了第一个任务了...."); return "main"; }, threadPoolExecutor); //第二步,等待第一步执行完成后进行异步执行 CompletableFuture<Void> two = main.thenAcceptAsync((res) -> { try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("执行了第二个任务....\t" + res); }, threadPoolExecutor); //第三步,等待第一步执行完成后进行异步执行 CompletableFuture<Void> thread = main.thenAcceptAsync((res) -> { try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("执行了第三个任务....\t" + res); }, threadPoolExecutor); //等待所有完成 CompletableFuture.allOf(main,two,thread).get(); System.out.println("主线程执行完毕....."); long end = System.currentTimeMillis(); System.out.println("main总是用时间:"+(end-start)); //所以总共是花了六秒时间 return R.ok(); } }
CompletableFuture实践用法
最新推荐文章于 2024-05-16 10:23:10 发布