• AsyncConfigurer 线程池


    转载自:https://blog.csdn.net/qq_30281443/article/details/83340909

    线程是开发中常用到的,但是如果没有定义线程池,程序不断的创建,销毁线程,需要消耗很多时间,所以我们定义线程池可以减小这部分时间,我来实现AsyncConfigurer来配置线程池,先看看这个接口有什么方法

        public interface AsyncConfigurer {
         
            Executor getAsyncExecutor();
            
            AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler();
         
        }


    Executor : 处理异步方法调用时要使用的实例,

    AsyncUncaughtExceptionHandler :在使用void返回类型的异步方法执行期间抛出异常时要使用的实例。

    实现接口代码如下:

    @Configuration
    @EnableAsync
    @EnableScheduling
    public class AsyncConfiguration implements AsyncConfigurer {
        
        private final Logger log = LoggerFactory.getLogger(AsyncConfiguration.class);
        
        @Override
        @Bean(name = "taskExecutor")
        public Executor getAsyncExecutor() {
            log.debug("Creating Async Task Executor");
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setCorePoolSize(10); //核心线程数
            executor.setMaxPoolSize(20);  //最大线程数
            executor.setQueueCapacity(1000); //队列大小
            executor.setKeepAliveSeconds(300); //线程最大空闲时间
            executor.setThreadNamePrefix("ics-Executor-"); ////指定用于新创建的线程名称的前缀。
            executor.setRejectedExecutionHandler(
            new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略
            return new ExceptionHandlingAsyncTaskExecutor(executor);
        }
        
        @Override
        public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
            return new SimpleAsyncUncaughtExceptionHandler();
        }
        
    }

    其中我们主要注意的就是拒绝策略方法:setRejectedExecutionHandler(),拒绝策略常用有有这四种

    ThreadPoolExecutor.AbortPolicy 丢弃任务并抛出RejectedExecutionException异常(默认)。
    ThreadPoolExecutor.DiscardPolic 丢弃任务,但是不抛出异常。
    ThreadPoolExecutor.DiscardOldestPolicy 丢弃队列最前面的任务,然后重新尝试执行任务
    ThreadPoolExecutor.CallerRunsPolic 由调用线程处理该任务

    还有一篇博文写的很好,https://www.cnblogs.com/memoryXudy/p/7737190.html

  • 相关阅读:
    OpenCV之图像归一化(normalize)
    虚拟机网络模式说明
    大端模式和小端模式
    ASCII、Unicode、UTF-8、UTF-8(without BOM)、UTF-16、UTF-32傻傻分不清
    MFC窗口通过OpenCV显示图片
    基于FFmpeg的Dxva2硬解码及Direct3D显示(五)
    PyQt5播放实时视频流或本地视频文件
    PyQt5信号与槽关联的两种方式
    PyCharm离线安装PyQt5_tools(QtDesigner)
    DC: 8
  • 原文地址:https://www.cnblogs.com/inspirationBoom/p/10552401.html
Copyright © 2020-2023  润新知