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 main = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行了第一个任务了....");
return "main";
}, threadPoolExecutor);
//第二步,等待第一步执行完成后进行异步执行
CompletableFuture two = main.thenAcceptAsync((res) -> {
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("执行了第二个任务....t" + res);
}, threadPoolExecutor);
//第三步,等待第一步执行完成后进行异步执行
CompletableFuture 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();
}
}