@Async创建线程池
时间: 2023-09-21 11:02:57 浏览: 95
@Async注解可以用来标记一个方法,表示该方法应该在一个新的线程中异步执行。但是,如果在应用程序中有大量这样的方法,那么每次调用都会创建一个新的线程,这可能会导致线程创建过多,从而影响应用程序的性能。为了避免这种情况,可以使用线程池来管理线程。
以下是使用@Async和线程池创建异步任务的示例:
1.创建一个线程池
```java
@Configuration
@EnableAsync
public class AsyncConfiguration implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(100);
executor.setQueueCapacity(10);
executor.setThreadNamePrefix("Async-Executor-");
executor.initialize();
return executor;
}
}
```
2.使用@Async注解标记异步方法
```java
@Service
public class MyService {
@Async
public void asyncMethod() {
// 异步执行的代码
}
}
```
在这个示例中,@Async注解标记的方法会被异步执行,并且由线程池中的一个线程来处理。当调用asyncMethod()方法时,Spring会将其提交到线程池中的一个线程来执行。
需要注意的是,@Async注解只能用于public方法。如果在同一个类中调用一个带有@Async注解的方法,那么该方法不会异步执行,因为Spring AOP无法截获该方法的调用。此外,如果在同一个类中调用一个异步方法,那么该方法也不会异步执行。
阅读全文