@Async搭配线程池使用
1.创建一个线程池
package com.pjk.config;
import com.sun.corba.se.spi.orbutil.threadpool.ThreadPool;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import java.util.concurrent.Executor;
//线程池配置类
@Configuration
@EnableAsync//开启spring对异步方法的支持
public class ThreadPoolConfig {
@Bean(name = "taskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();//创建线程池
executor.setCorePoolSize(10);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(30);//设定任务队列的个数
executor.setThreadNamePrefix("taskExecutor");//设定线程池中的线程的名字前缀 线程名字将以此开头
executor.initialize();
return executor;
}
}
2.创建一个异步方法类 在类中添加异步方法
package com.pjk.util;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.concurrent.CompletableFuture;
@Component
public class AsyncMethod {
//测试异步方法
@Async("taskExecutor")
public CompletableFuture<Integer> sum(ArrayList<Integer> integers ) throws InterruptedException {
CompletableFuture<Integer> completableFuture = new CompletableFuture<>();
int sum=0;
for (Integer integer : integers) {
sum+=integer;
}
Thread.sleep(3000);
System.out.println("计算结果为:"+sum);
completableFuture.complete(sum);
return completableFuture;
}
}
3.在你的类中 使用异步方法
package com.pjk;
import com.pjk.util.AsyncMethod;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.scheduling.annotation.EnableAsync;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
@EnableAsync
@SpringBootTest
public class ThreadPoolTest {
@Resource
private AsyncMethod asyncMethod;
@Test
void testAsync() throws InterruptedException, ExecutionException {
ArrayList<Integer> integers = new ArrayList<>(1000000);
for (int i = 0; i < 1000000; i++) {
integers.add(i);
}
CompletableFuture<Integer> future = asyncMethod.sum(integers);
future.thenAccept(result->{
System.out.println("测试异步结果:"+result);
});
System.out.println("测试异步方法");
Thread.sleep(5000);
System.out.println("测试异步结果");
}
}
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
