Java Spring引导异步
我不确定Spring引导异步是如何工作的?我知道webserver有自己的线程池,每个请求都由池中的一个线程处理。现在,当我们使用spring boot实现异步web服务并配置10个线程时,这是否意味着线程中有线程?为了澄清这一点,web服务器将向线程分配一个请求。现在,当该线程开始执行并调用标记为@Asynch的服务/函数时,它可以创建多个线程来处理该请求。请告诉我我的理解是否正确。使用@Async将使其在单独的线程中执行,即调用方不会等待被调用方法的完成。 您可以配置使用的执行器Java Spring引导异步,java,multithreading,spring-boot,asynchronous,microservices,Java,Multithreading,Spring Boot,Asynchronous,Microservices,我不确定Spring引导异步是如何工作的?我知道webserver有自己的线程池,每个请求都由池中的一个线程处理。现在,当我们使用spring boot实现异步web服务并配置10个线程时,这是否意味着线程中有线程?为了澄清这一点,web服务器将向线程分配一个请求。现在,当该线程开始执行并调用标记为@Asynch的服务/函数时,它可以创建多个线程来处理该请求。请告诉我我的理解是否正确。使用@Async将使其在单独的线程中执行,即调用方不会等待被调用方法的完成。 您可以配置使用的执行器 @Conf
@Configuration
@EnableAsync
public class SpringAsyncConfig {
@Bean(name = "fooExecutor")
public Executor fooExecutor() {
return new ThreadPoolTaskExecutor();
}
}
使用@Async(“fooExecutor”)您可以进行如下配置,以控制更多线程,例如带有前缀的线程名称、池大小,。。。通过这种方式,您可以确保控制线程池
@Configuration
@EnableAsync
public class AsyncConfiguration implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(5);
executor.setMaxPoolSize(10);
executor.setQueueCapacity(5000);
executor.setThreadNamePrefix("MyThread-");
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.initialize();
return executor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new SimpleAsyncUncaughtExceptionHandler();
}
}
然后将@Async注释放在代码bean或要使其异步的方法上
有关此主题的更多信息,请参阅spring的调度文档
我希望这会对您有所帮助;) 它不是一根线在另一根线里面@Async将使请求在单独的线程中执行,并且请求的调用方不会等待被调用的方法完成 要启用异步,可以通过添加
@Configuration
@EnableAsync
public class AsyncExample {
// Define a threadpool executor if needed,
@Bean(name = "threadPoolTaskExecutor")
public Executor threadPoolTaskExecutor() {
return new ThreadPoolTaskExecutor();
}
}
然后,您可以使用定义的线程池执行器定义异步方法,如下所示
@Async("threadPoolTaskExecutor")
public void asyncMethodWithConfiguredExecutor() {
// Method Definition
}
这是否意味着作为@Asynch的一部分创建的线程池将不同于web服务器线程池?