CompletableFuture实现了CompletionStage接口和Future接口,集成了异步回调、流式处理、多个Future组合处理的能力,
使Java在处理多任务的协同工作时更加方便简洁
一、自定义线程池
package com.atguigu.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
/**
* Description: 线程池测试
*
* @Author: zhx & moon hongxu_1234@163.com
* @Date: 2021-04-22 0:17
* @version: V1.0.0
*/
@Configuration
public class ThreadPoolConfig {
@Bean(name = "zhxExecutors")
public Executor getAsyncThread() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
//线程池维护线程的最少数量,核心线程数
taskExecutor.setCorePoolSize(5);
//线程池维护线程的最大数量,只有在缓冲队列满了之后才会申请超过核心线程数的线程
taskExecutor.setMaxPoolSize(10);
//缓存队列
taskExecutor.setQueueCapacity(20);
//允许的空闲时间,当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
taskExecutor.setKeepAliveSeconds(200);
//线程名称前缀
taskExecutor.setThreadNamePrefix("zhx-moon-thread-");
// 线程池对拒绝任务(无线程可用)的处理策略,目前只支持AbortPolicy、CallerRunsPolicy;默认为后者
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
// 调度器shutdown被调用时等待当前被调度的任务完成
taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
// 等待时长
taskExecutor.setAwaitTerminationSeconds(60);
taskExecutor.initialize();
return taskExecutor;
}
}
二、自定义测试方法
package com.atguigu.util;
import lombok.extern.slf4j.Slf4j;
/**
* Description: 子线程方法耗时测试
*
* @Author: zhx & moon hongxu_1234@163.com
* @Date: 2021-06-21 14:00
* @version: V1.0.0
*/
@Slf4j
public class TimeConsumingUtil {
private int num = 0;
public TimeConsumingUtil(int num){
this.num = num;
}
public int square(){
long start = System.currentTimeMillis();
try {
Thread.sleep(1000);
}catch (Exception e){
}
log.info("线程:{} , 耗时 {} ms",Thread.currentThread().getName(),(System.currentTimeMillis()-start));
return num*num;
}
}
三、自定义接口类测试
1.异步任务批量提交测试:Future.submit
@GetMapping("/submit")
public void submit() throws ExecutionException, InterruptedException {
List<Integer> list = Arrays.asList(new Integer[]{1,4,9,16});
ThreadPoolTaskExecutor threadPoolTaskExecutor = (ThreadPoolTaskExecutor)zhxExecutors;
List<Integer> result = new ArrayList<>();
List<Future<Integer>> futureList = new ArrayList<>();
long start = System.currentTimeMillis();
for (Integer i:list){
TimeConsumingUtil timeConsumingUtil = new TimeConsumingUtil(i);
futureList.add(threadPoolTaskExecutor.submit(timeConsumingUtil::square));
}
for (Future<Integer> future:futureList){
result.add(future.get());
}
log.info("处理总耗时 {} , 结果:{}",(System.currentTimeMillis()-start),result);
}
执行结果
请求接口:http://127.0.0.1:8887/submit
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.7.RELEASE)
2021-06-22 16:14:07.254 INFO 12584 --- [ main] com.atguigu.HellowWorldMainApplication : Starting HellowWorldMainApplication on zhx_yue with PID 12584 (C:\Users\Administrator\IdeaProjects\spring-boot-01-helloworld\target\classes started by Administrator in C:\Users\Administrator\IdeaProjects\spring-boot-01-helloworld)
2021-06-22 16:14:07.256 INFO 12584 --- [ main] com.atguigu.HellowWorldMainApplication : No active profile set, falling back to default profiles: default
2021-06-22 16:14:07.863 INFO 12584 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8887 (http)
2021-06-22 16:14:07.875 INFO 12584 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-06-22 16:14:07.875 INFO 12584 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.22]
2021-06-22 16:14:07.939 INFO 12584 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-06-22 16:14:07.939 INFO 12584 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 658 ms
2021-06-22 16:14:08.133 INFO 12584 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService
2021-06-22 16:14:08.134 INFO 12584 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'zhxExecutors'
2021-06-22 16:14:08.371 INFO 12584 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8887 (http) with context path ''
2021-06-22 16:14:08.373 INFO 12584 --- [ main] com.atguigu.HellowWorldMainApplication : Started HellowWorldMainApplication in 1.341 seconds (JVM running for 1.824)
2021-06-22 16:14:28.252 INFO 12584 --- [nio-8887-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-06-22 16:14:28.252 INFO 12584 --- [nio-8887-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-06-22 16:14:28.255 INFO 12584 --- [nio-8887-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 3 ms
2021-06-22 16:14:29.282 INFO 12584 --- [x-moon-thread-1] com.atguigu.util.TimeConsumingUtil : 线程:zhx-moon-thread-1 , 耗时 1014 ms
2021-06-22 16:14:29.282 INFO 12584 --- [x-moon-thread-4] com.atguigu.util.TimeConsumingUtil : 线程:zhx-moon-thread-4 , 耗时 1014 ms
2021-06-22 16:14:29.282 INFO 12584 --- [x-moon-thread-3] com.atguigu.util.TimeConsumingUtil : 线程:zhx-moon-thread-3 , 耗时 1014 ms
2021-06-22 16:14:29.282 INFO 12584 --- [x-moon-thread-2] com.atguigu.util.TimeConsumingUtil : 线程:zhx-moon-thread-2 , 耗时 1014 ms
2021-06-22 16:14:29.286 INFO 12584 --- [nio-8887-exec-1] com.atguigu.controller.HelloController : 处理总耗时 1019 , 结果:[1, 16, 81, 256]
2.并行流处理
package com.atguigu.controller;
import com.alibaba.druid.pool.DruidDataSource;
import com.atguigu.config.DynamicDataSource;
import com.atguigu.entity.UserEntity;
import com.atguigu.mapper.UserMapper;
import com.atguigu.util.TimeConsumingUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Executor;
import java.util.stream.Collectors;
/**
* @author Administrator
*/
@RestController
@Slf4j
public class HelloController {
@Autowired
Executor zhxExecutors;
@GetMapping("/timeConsumingUtil")
public void timeConsumingUtil(int type){
long start = System.currentTimeMillis();
List<Integer> list = Arrays.asList(new Integer[]{1,4,9,16});
List<Integer> result;
if(type==0){
//并行
result = simpleParallel(list);
}else{
//串行
result = simpleSerial(list);
}
log.info("处理总耗时 {} , 结果:{}",(System.currentTimeMillis()-start),result);
}
/**
* 简单Java并行代码
* @param list
*/
public List<Integer> simpleParallel(List<Integer> list){
List<CompletableFuture<Integer>> futures = new ArrayList<>();
for(Integer i:list){
TimeConsumingUtil timeConsumingUtil = new TimeConsumingUtil(i);
futures.add(CompletableFuture.supplyAsync(()-> timeConsumingUtil.square(),zhxExecutors));
}
// 使用allOf方法来表示所有的并行任务
CompletableFuture<Void> allFutures = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
// 下面的方法可以帮助我们获得所有子任务的处理结果
CompletableFuture<List<Integer>> finalResults = allFutures.thenApply(v ->
futures.stream().map(CompletableFuture::join).collect(Collectors.toList())
);
return finalResults.join();
}
/**
* 简单Java串行代码
* @param list
* @return
*/
public List<Integer> simpleSerial(List<Integer> list){
List<Integer> lists = new ArrayList<>();
for (Integer i:list){
TimeConsumingUtil timeConsumingUtil = new TimeConsumingUtil(i);
lists.add(timeConsumingUtil.square());
}
return lists;
}
}
四、测试结果
请求接口:http://127.0.0.1:8887/timeConsumingUtil?type=0
执行结果如下:并行四个线程同步进行方法处理,串行是依次进行处理方法的调用;并行处理效率高于串行
"C:\Program Files\Java\jdk1.8.0_221\bin\java.exe" -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:50346,suspend=y,server=n -XX:TieredStopAtLevel=1 -noverify -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dspring.jmx.enabled=true -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:C:\Users\Administrator\AppData\Local\JetBrains\IntelliJIdea2020.2\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_221\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_221\jre\lib\rt.jar;C:\Users\Administrator\IdeaProjects\spring-boot-01-helloworld\target\classes;D:\apache-maven-space\org\springframework\boot\spring-boot-starter-tomcat\2.1.7.RELEASE\spring-boot-starter-tomcat-2.1.7.RELEASE.jar;D:\apache-maven-space\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;D:\apache-maven-space\org\apache\tomcat\embed\tomcat-embed-core\9.0.22\tomcat-embed-core-9.0.22.jar;D:\apache-maven-space\org\apache\tomcat\embed\tomcat-embed-el\9.0.22\tomcat-embed-el-9.0.22.jar;D:\apache-maven-space\org\apache\tomcat\embed\tomcat-embed-websocket\9.0.22\tomcat-embed-websocket-9.0.22.jar;D:\apache-maven-space\org\springframework\boot\spring-boot-starter-web\2.1.7.RELEASE\spring-boot-starter-web-2.1.7.RELEASE.jar;D:\apache-maven-space\org\springframework\boot\spring-boot-starter\2.1.7.RELEASE\spring-boot-starter-2.1.7.RELEASE.jar;D:\apache-maven-space\org\springframework\boot\spring-boot\2.1.7.RELEASE\spring-boot-2.1.7.RELEASE.jar;D:\apache-maven-space\org\springframework\boot\spring-boot-autoconfigure\2.1.7.RELEASE\spring-boot-autoconfigure-2.1.7.RELEASE.jar;D:\apache-maven-space\org\springframework\boot\spring-boot-starter-logging\2.1.7.RELEASE\spring-boot-starter-logging-2.1.7.RELEASE.jar;D:\apache-maven-space\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\apache-maven-space\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\apache-maven-space\org\apache\logging\log4j\log4j-to-slf4j\2.11.2\log4j-to-slf4j-2.11.2.jar;D:\apache-maven-space\org\apache\logging\log4j\log4j-api\2.11.2\log4j-api-2.11.2.jar;D:\apache-maven-space\org\slf4j\jul-to-slf4j\1.7.26\jul-to-slf4j-1.7.26.jar;D:\apache-maven-space\org\springframework\spring-core\5.1.9.RELEASE\spring-core-5.1.9.RELEASE.jar;D:\apache-maven-space\org\springframework\spring-jcl\5.1.9.RELEASE\spring-jcl-5.1.9.RELEASE.jar;D:\apache-maven-space\org\yaml\snakeyaml\1.23\snakeyaml-1.23.jar;D:\apache-maven-space\org\springframework\boot\spring-boot-starter-json\2.1.7.RELEASE\spring-boot-starter-json-2.1.7.RELEASE.jar;D:\apache-maven-space\com\fasterxml\jackson\core\jackson-databind\2.9.9\jackson-databind-2.9.9.jar;D:\apache-maven-space\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;D:\apache-maven-space\com\fasterxml\jackson\core\jackson-core\2.9.9\jackson-core-2.9.9.jar;D:\apache-maven-space\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.9\jackson-datatype-jdk8-2.9.9.jar;D:\apache-maven-space\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.9\jackson-datatype-jsr310-2.9.9.jar;D:\apache-maven-space\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.9\jackson-module-parameter-names-2.9.9.jar;D:\apache-maven-space\org\hibernate\validator\hibernate-validator\6.0.17.Final\hibernate-validator-6.0.17.Final.jar;D:\apache-maven-space\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;D:\apache-maven-space\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;D:\apache-maven-space\com\fasterxml\classmate\1.4.0\classmate-1.4.0.jar;D:\apache-maven-space\org\springframework\spring-web\5.1.9.RELEASE\spring-web-5.1.9.RELEASE.jar;D:\apache-maven-space\org\springframework\spring-beans\5.1.9.RELEASE\spring-beans-5.1.9.RELEASE.jar;D:\apache-maven-space\org\springframework\spring-webmvc\5.1.9.RELEASE\spring-webmvc-5.1.9.RELEASE.jar;D:\apache-maven-space\org\springframework\spring-aop\5.1.9.RELEASE\spring-aop-5.1.9.RELEASE.jar;D:\apache-maven-space\org\springframework\spring-context\5.1.9.RELEASE\spring-context-5.1.9.RELEASE.jar;D:\apache-maven-space\org\springframework\spring-expression\5.1.9.RELEASE\spring-expression-5.1.9.RELEASE.jar;D:\apache-maven-space\org\bytedeco\javacv\1.5.4\javacv-1.5.4.jar;D:\apache-maven-space\org\bytedeco\javacpp\1.5.4\javacpp-1.5.4.jar;D:\apache-maven-space\org\bytedeco\openblas\0.3.10-1.5.4\openblas-0.3.10-1.5.4.jar;D:\apache-maven-space\org\bytedeco\opencv\4.4.0-1.5.4\opencv-4.4.0-1.5.4.jar;D:\apache-maven-space\org\bytedeco\ffmpeg\4.3.1-1.5.4\ffmpeg-4.3.1-1.5.4.jar;D:\apache-maven-space\org\bytedeco\flycapture\2.13.3.31-1.5.4\flycapture-2.13.3.31-1.5.4.jar;D:\apache-maven-space\org\bytedeco\libdc1394\2.2.6-1.5.4\libdc1394-2.2.6-1.5.4.jar;D:\apache-maven-space\org\bytedeco\libfreenect\0.5.7-1.5.4\libfreenect-0.5.7-1.5.4.jar;D:\apache-maven-space\org\bytedeco\libfreenect2\0.2.0-1.5.4\libfreenect2-0.2.0-1.5.4.jar;D:\apache-maven-space\org\bytedeco\librealsense\1.12.4-1.5.4\librealsense-1.12.4-1.5.4.jar;D:\apache-maven-space\org\bytedeco\librealsense2\2.29.0-1.5.4\librealsense2-2.29.0-1.5.4.jar;D:\apache-maven-space\org\bytedeco\videoinput\0.200-1.5.4\videoinput-0.200-1.5.4.jar;D:\apache-maven-space\org\bytedeco\artoolkitplus\2.3.1-1.5.4\artoolkitplus-2.3.1-1.5.4.jar;D:\apache-maven-space\org\bytedeco\flandmark\1.07-1.5.4\flandmark-1.07-1.5.4.jar;D:\apache-maven-space\org\bytedeco\leptonica\1.80.0-1.5.4\leptonica-1.80.0-1.5.4.jar;D:\apache-maven-space\org\bytedeco\tesseract\4.1.1-1.5.4\tesseract-4.1.1-1.5.4.jar;D:\apache-maven-space\org\openjfx\javafx-graphics\11\javafx-graphics-11.jar;D:\apache-maven-space\org\openjfx\javafx-graphics\11\javafx-graphics-11-win.jar;D:\apache-maven-space\org\openjfx\javafx-base\11\javafx-base-11.jar;D:\apache-maven-space\org\openjfx\javafx-base\11\javafx-base-11-win.jar;D:\apache-maven-space\org\projectlombok\lombok\1.18.8\lombok-1.18.8.jar;D:\apache-maven-space\org\mybatis\spring\boot\mybatis-spring-boot-starter\2.1.1\mybatis-spring-boot-starter-2.1.1.jar;D:\apache-maven-space\org\springframework\boot\spring-boot-starter-jdbc\2.1.7.RELEASE\spring-boot-starter-jdbc-2.1.7.RELEASE.jar;D:\apache-maven-space\com\zaxxer\HikariCP\3.2.0\HikariCP-3.2.0.jar;D:\apache-maven-space\org\slf4j\slf4j-api\1.7.26\slf4j-api-1.7.26.jar;D:\apache-maven-space\org\springframework\spring-jdbc\5.1.9.RELEASE\spring-jdbc-5.1.9.RELEASE.jar;D:\apache-maven-space\org\springframework\spring-tx\5.1.9.RELEASE\spring-tx-5.1.9.RELEASE.jar;D:\apache-maven-space\org\mybatis\spring\boot\mybatis-spring-boot-autoconfigure\2.1.1\mybatis-spring-boot-autoconfigure-2.1.1.jar;D:\apache-maven-space\org\mybatis\mybatis\3.5.3\mybatis-3.5.3.jar;D:\apache-maven-space\org\mybatis\mybatis-spring\2.0.3\mybatis-spring-2.0.3.jar;D:\apache-maven-space\com\github\pagehelper\pagehelper\5.1.2\pagehelper-5.1.2.jar;D:\apache-maven-space\com\github\jsqlparser\jsqlparser\1.0\jsqlparser-1.0.jar;D:\apache-maven-space\org\postgresql\postgresql\42.2.6\postgresql-42.2.6.jar;D:\apache-maven-space\com\alibaba\druid\1.1.16\druid-1.1.16.jar;D:\apache-maven-space\org\springframework\boot\spring-boot-configuration-processor\2.1.7.RELEASE\spring-boot-configuration-processor-2.1.7.RELEASE.jar;D:\apache-maven-space\com\alibaba\fastjson\1.2.70\fastjson-1.2.70.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2020.2.3\lib\idea_rt.jar" com.atguigu.HellowWorldMainApplication
Connected to the target VM, address: '127.0.0.1:50346', transport: 'socket'
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.7.RELEASE)
2021-06-21 15:44:36.507 INFO 2584 --- [ main] com.atguigu.HellowWorldMainApplication : Starting HellowWorldMainApplication on zhx_yue with PID 2584 (C:\Users\Administrator\IdeaProjects\spring-boot-01-helloworld\target\classes started by Administrator in C:\Users\Administrator\IdeaProjects\spring-boot-01-helloworld)
2021-06-21 15:44:36.509 INFO 2584 --- [ main] com.atguigu.HellowWorldMainApplication : No active profile set, falling back to default profiles: default
2021-06-21 15:44:37.143 INFO 2584 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8887 (http)
2021-06-21 15:44:37.155 INFO 2584 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-06-21 15:44:37.155 INFO 2584 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.22]
2021-06-21 15:44:37.211 INFO 2584 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-06-21 15:44:37.211 INFO 2584 --- [ main] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 677 ms
2021-06-21 15:44:37.404 INFO 2584 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService
2021-06-21 15:44:37.405 INFO 2584 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'zhxExecutors'
2021-06-21 15:44:37.640 INFO 2584 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8887 (http) with context path ''
2021-06-21 15:44:37.642 INFO 2584 --- [ main] com.atguigu.HellowWorldMainApplication : Started HellowWorldMainApplication in 1.391 seconds (JVM running for 2.102)
2021-06-21 15:45:02.525 INFO 2584 --- [nio-8887-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-06-21 15:45:02.525 INFO 2584 --- [nio-8887-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-06-21 15:45:02.529 INFO 2584 --- [nio-8887-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 4 ms
2021-06-21 15:45:03.571 INFO 2584 --- [x-moon-thread-3] com.atguigu.util.TimeConsumingUtil : 线程:zhx-moon-thread-3 , 耗时 1001 ms
2021-06-21 15:45:03.571 INFO 2584 --- [x-moon-thread-4] com.atguigu.util.TimeConsumingUtil : 线程:zhx-moon-thread-4 , 耗时 1001 ms
2021-06-21 15:45:03.571 INFO 2584 --- [x-moon-thread-2] com.atguigu.util.TimeConsumingUtil : 线程:zhx-moon-thread-2 , 耗时 1001 ms
2021-06-21 15:45:03.571 INFO 2584 --- [x-moon-thread-1] com.atguigu.util.TimeConsumingUtil : 线程:zhx-moon-thread-1 , 耗时 1001 ms
2021-06-21 15:45:03.572 INFO 2584 --- [nio-8887-exec-1] com.atguigu.controller.HelloController : 处理总耗时 1004 , 结果:[1, 16, 81, 256]
2021-06-21 15:45:18.714 INFO 2584 --- [nio-8887-exec-2] com.atguigu.util.TimeConsumingUtil : 线程:http-nio-8887-exec-2 , 耗时 1011 ms
2021-06-21 15:45:19.718 INFO 2584 --- [nio-8887-exec-2] com.atguigu.util.TimeConsumingUtil : 线程:http-nio-8887-exec-2 , 耗时 1004 ms
2021-06-21 15:45:20.729 INFO 2584 --- [nio-8887-exec-2] com.atguigu.util.TimeConsumingUtil : 线程:http-nio-8887-exec-2 , 耗时 1011 ms
2021-06-21 15:45:21.733 INFO 2584 --- [nio-8887-exec-2] com.atguigu.util.TimeConsumingUtil : 线程:http-nio-8887-exec-2 , 耗时 1004 ms
2021-06-21 15:45:21.733 INFO 2584 --- [nio-8887-exec-2] com.atguigu.controller.HelloController : 处理总耗时 4030 , 结果:[1, 16, 81, 256]
2021-06-21 15:49:12.419 INFO 2584 --- [nio-8887-exec-4] com.atguigu.util.TimeConsumingUtil : 线程:http-nio-8887-exec-4 , 耗时 1011 ms
2021-06-21 15:49:13.425 INFO 2584 --- [nio-8887-exec-4] com.atguigu.util.TimeConsumingUtil : 线程:http-nio-8887-exec-4 , 耗时 1006 ms
2021-06-21 15:49:14.433 INFO 2584 --- [nio-8887-exec-4] com.atguigu.util.TimeConsumingUtil : 线程:http-nio-8887-exec-4 , 耗时 1008 ms
2021-06-21 15:49:15.438 INFO 2584 --- [nio-8887-exec-4] com.atguigu.util.TimeConsumingUtil : 线程:http-nio-8887-exec-4 , 耗时 1005 ms
2021-06-21 15:49:15.438 INFO 2584 --- [nio-8887-exec-4] com.atguigu.controller.HelloController : 处理总耗时 4030 , 结果:[1, 16, 81, 256]