Aysnc的异步执行的线程池

Posted duanxz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Aysnc的异步执行的线程池相关的知识,希望对你有一定的参考价值。

ProxyAsyncConfiguration.java源码:

@Configuration
@Role(BeanDefinition.ROLE_INFRASTRUCTURE)
public class ProxyAsyncConfiguration extends AbstractAsyncConfiguration {

    @Bean(name = TaskManagementConfigUtils.ASYNC_ANNOTATION_PROCESSOR_BEAN_NAME)
    @Role(BeanDefinition.ROLE_INFRASTRUCTURE)
    public AsyncAnnotationBeanPostProcessor asyncAdvisor() {
        Assert.notNull(this.enableAsync, "@EnableAsync annotation metadata was not injected");
        AsyncAnnotationBeanPostProcessor bpp = new AsyncAnnotationBeanPostProcessor();
        Class<? extends Annotation> customAsyncAnnotation = this.enableAsync.getClass("annotation");
        if (customAsyncAnnotation != AnnotationUtils.getDefaultValue(EnableAsync.class, "annotation")) {
            bpp.setAsyncAnnotationType(customAsyncAnnotation);
        }
        if (this.executor != null) {
            bpp.setExecutor(this.executor);
        }
        if (this.exceptionHandler != null) {
            bpp.setExceptionHandler(this.exceptionHandler);
        }
        bpp.setProxyTargetClass(this.enableAsync.getBoolean("proxyTargetClass"));
        bpp.setOrder(this.enableAsync.<Integer>getNumber("order"));
        return bpp;
    }

}

 

AbstractAsyncConfiguration.java源码:

    @Autowired(required = false)
    void setConfigurers(Collection<AsyncConfigurer> configurers) {
        if (CollectionUtils.isEmpty(configurers)) {
            return;
        }
        if (configurers.size() > 1) {
            throw new IllegalStateException("Only one AsyncConfigurer may exist");
        }
        AsyncConfigurer configurer = configurers.iterator().next();
        this.executor = configurer.getAsyncExecutor();
        this.exceptionHandler = configurer.getAsyncUncaughtExceptionHandler();
    }

 

AsyncDefaultAutoConfiguration.java源码:

public class AsyncDefaultAutoConfiguration {

    @Autowired private BeanFactory beanFactory;

    @Configuration
    @ConditionalOnMissingBean(AsyncConfigurer.class)
    @ConditionalOnProperty(value = "spring.sleuth.async.configurer.enabled", matchIfMissing = true)
    static class DefaultAsyncConfigurerSupport extends AsyncConfigurerSupport {

        @Autowired private BeanFactory beanFactory;

        @Override
        public Executor getAsyncExecutor() {
            return new LazyTraceExecutor(this.beanFactory, new SimpleAsyncTaskExecutor());
        }
    }

 更多的SimpleAsyncTaskExecutor见《spring线程池(同步、异步)

以上是关于Aysnc的异步执行的线程池的主要内容,如果未能解决你的问题,请参考以下文章

第十次总结 线程的异步和同步

线程池与并行度

线程池+协程+gevent模块

python GIL锁进程池与线程池同步异步

GIL 线程池 进程池 同步 异步

spring的事件机制实战