直接贴代码
自定义线程池
package com.xh.lawsuit.rest.modular.example;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
@Configuration
public class GlobalThreadPool {
@Bean
public Executor taskExecutor() {
int cpuCount = Runtime.getRuntime().availableProcessors() ;
int coreThreadSize = cpuCount << 1;
int maxThreadSize = cpuCount << 4;
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(coreThreadSize);
executor.setMaxPoolSize(maxThreadSize);
executor.setQueueCapacity(5000);
executor.setThreadNamePrefix("Java同学会-");
executor.initialize();
return executor;
}
}
异步的service
package com.xh.lawsuit.rest.modular.example;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;
import java.util.concurrent.CompletableFuture;
/**
* @author felix
* @data 2020/1/19 0019 16:55
*/
@EnableAsync
@Service
@Slf4j
public class BusyService {
@Async
public CompletableFuture<String> busyMethod(String name) throws InterruptedException {
log.info(name);
String s = "Hello,"+name+"!";
//模拟耗时操作,5秒
Thread.sleep(5000);
return CompletableFuture.completedFuture(s);
}
}
测试类测试程序
@Test
public void test() throws InterruptedException, ExecutionException {
long start = System.currentTimeMillis();
CompletableFuture<String> jane = busyService.busyMethod("Jane");
CompletableFuture<String> allen = busyService.busyMethod("Allen");
CompletableFuture<String> james = busyService.busyMethod("James");
CompletableFuture.allOf(jane,allen,james).join();
log.info(jane.get());
log.info(allen.get());
log.info(james.get());
long end = System.currentTimeMillis();
log.info("最终耗时="+(end-start));
}
输出结果,时间为5010毫秒,异步执行成功