首页 > 其他分享 >ThreadPoolTaskExecutor线程池创建

ThreadPoolTaskExecutor线程池创建

时间:2022-08-22 11:41:56浏览次数:50  
标签:销毁 创建 threadPoolTaskExecutor 线程 org import ThreadPoolTaskExecutor

package com.xx.xx.config;

import java.util.concurrent.ThreadPoolExecutor;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

/**
 * 线程池配置
 *
 * @author jiangkd
 * @date 2022/7/14 14:30
 */
@Configuration
public class ThreadPoolTaskExecutorConfig {

    final private Logger log = LoggerFactory.getLogger(this.getClass());
    
    /**
     * 线程池, ThreadPoolTaskExecutor
     * <p>
     * ThreadPoolTaskExecutor实质是对ThreadPoolExecutor的封装
     * 线程池说明以及参数参考: https://www.cnblogs.com/no-celery/p/16355344.html
     *
     * @return ThreadPoolTaskExecutor
     */
    @Bean
    public ThreadPoolTaskExecutor threadPoolTaskExecutor() {
        // 
        final ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        // 最佳线程数目 =((线程等待时间+线程CPU时间)/线程CPU时间 )*CPU数目
        // 核心线程池大小
        threadPoolTaskExecutor.setCorePoolSize(8);
        // 最大线程数
        threadPoolTaskExecutor.setMaxPoolSize(16);
        // 线程池维护线程(不包括核心线程)所允许的空闲时间, 秒
        threadPoolTaskExecutor.setKeepAliveSeconds(100);
        // 队列最大长度
        threadPoolTaskExecutor.setQueueCapacity(30);
        // 线程池关闭的时候等待所有任务都完成后, 再继续销毁其他的Bean
        threadPoolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true);
        // 线程池中任务销毁的等待时间, 如果超过这个时间还没有销毁就强制销毁, 以确保应用最后能够被关闭, 而不是阻塞住
        threadPoolTaskExecutor.setAwaitTerminationSeconds(60);
        // 如果为true, 核心线程空闲时间到达setKeepAliveSeconds秒后会被销毁
        threadPoolTaskExecutor.setAllowCoreThreadTimeOut(false);
        // 线程前缀名称, 方便定位处理任务所在的线程池
        threadPoolTaskExecutor.setThreadNamePrefix("ct-logic-task-");
        /*
         拒绝策略
         采用默认策略, 线程池和队列都满了的时候, 丢弃任务 && 直接抛出java.util.concurrent.RejectedExecutionException异常
         */
        threadPoolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());

        // 初始化线程池
        threadPoolTaskExecutor.initialize();
        log.info("自定义线程池, ThreadPoolTaskExecutor线程池初始化 ... SUCCESS");

        return threadPoolTaskExecutor;
    }
}

标签:销毁,创建,threadPoolTaskExecutor,线程,org,import,ThreadPoolTaskExecutor
From: https://www.cnblogs.com/no-celery/p/16612220.html

相关文章

  • 创建postgresql外部文件表
     【1】创建file_fdwcreateextensionfile_fdw;createserverserver_file_fdwforeigndatawrapperfile_fdw; [2]建立外部表 就以常见emp表为例; create......
  • 为Jupyter notebook创建新kernel
    在新的虚拟环境中创建kernel进入需要创建kernel的虚拟环境condaactivatepytorch安装ipykernelipykernel是必须安装的,也可以直接安装jupyter,会自动包含ipykernelpi......
  • mysql创建用户,并授予权限
    1.创建用户(1)创建默认用户为root,创建新用户用:createuser‘用户名’@‘IP地址’identifiedby'密码'。例如:createuser‘XXX’@‘192.168.43.1’identifiedby'111......
  • windows创建SSH key
    安装Gitforwindowshttps://git-scm.com/download/win创建密钥对打开命令行,输入以下命令$ssh-keygen-trsa-C"ZhangSan<[email protected]>"-fZh......
  • 多线程的爬取
    #导入一个请求的模块importjsonimporttimefromconcurrent.futures.threadimportThreadPoolExecutorfromurllib.parseimporturlencodeimportrequests#图片的名字......
  • 2022.8.21 线程池
    11、线程池(重点)线程池Executors:3大方法、7大参数、4种拒绝策略池化技术程序的运行,本质:占用系统的资源!优化资源的使用!==>引进了一种技术池化池线程池、连接池、内......
  • nfs storageclass 创建pvc pending
    nfsstorageclass创建pvcpending使用nfs作为外部存储,一直启动不起来,查看pvc和pods信息如下:1、PVC一直处于pending状态【www-nfs-web-0Pendingk8s-nfs-stor......
  • 异步和多线程区别
    异步和多线程区别异步和多线程有什么区别其实,异步是目的,而多线程是实现这个目的的方法。异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步......
  • springboot多线程环境下注入bean空指针问题解决
    多线程环境下注入bean会出现空指针了..我是怎么知道这个bean有有没有在启动的时候注入进来的呢?用于指示bean包含在SpringApplication中时应该运行的接口。多个CommandL......
  • 使用线程池,并发计算1~50、51~100的和,再进⾏汇总统计。
    知识点:获取线程池、提交任务、获取返回值 获取线程池的几种方式:newFixedThreadPool(intnThreads)获取固定数量的线程池。参数:指定线程池中线程的数量。(使用这种)newC......