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线程池创建的更多相关文章

  1. 记录ThreadPoolTaskExecutor线程池的在项目中的实际应用,讲解一下线程池的配置和参数理解。

    前言:最近项目中与融360项目中接口对接,有反馈接口(也就是我们接收到请求,需要立即响应,并且还要有一个接口推送给他们其他计算结果),推送过程耗时.或者说两个接口不能是同时返回,有先后顺序. 这时我想 ...

  2. 用 ThreadPoolExecutor/ThreadPoolTaskExecutor 线程池技术提高系统吞吐量(附带线程池参数详解和使用注意事项)

    1.概述 在Java中,我们一般通过集成Thread类和实现Runnnable接口,调用线程的start()方法实现线程的启动.但如果并发的数量很多,而且每个线程都是执行很短的时间便结束了,那样频繁的 ...

  3. Python 之简单线程池创建

    try: from Queue import Queue, Empty except: from queue import Queue, Empty import threading import t ...

  4. JDBC线程池创建与DBCP源码阅读

    创建数据库连接是一个比较消耗性能的操作,同时在并发量较大的情况下创建过多的连接对服务器形成巨大的压力.对于资源的频繁分配﹑释放所造成的问题,使用连接池技术是一种比较好的解决方式. 在Java中,连接池 ...

  5. Java队列——线程池创建的例子

    线程池为线程生命周期开销问题和资源不足问题提供了解决方案.通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上.其好处是,因为在请求到达时线程已经存在,所以无意中也消除了线程创建所带来的延迟.这 ...

  6. java中线程池创建的几种方式

    java中创建线程池的方式一般有两种: 通过Executors工厂方法创建 通过new ThreadPoolExecutor(int corePoolSize, int maximumPoolSize ...

  7. C#使用线程池创建线程

    using System; using System.Threading; public class Example { public static void Main() { // Queue th ...

  8. ThreadPoolExecutor – Java Thread Pool Example(java线程池创建和使用)

    Java thread pool manages the pool of worker threads, it contains a queue that keeps tasks waiting to ...

  9. Spring线程池ThreadPoolTaskExecutor配置及详情

    Spring线程池ThreadPoolTaskExecutor配置及详情 1. ThreadPoolTaskExecutor配置 <!-- spring thread pool executor ...

  10. SPRING中的线程池ThreadPoolTaskExecutor(转)

    转自:https://blog.csdn.net/zhanglongfei_test/article/details/51888433 一.初始化 1,直接调用 ThreadPoolTaskExecu ...

随机推荐

  1. 遍历operation

    std::ostringstream out; double f8Value; NXOpen::CAM::CAMSetup *camSetup = displayPart->CAMSetup() ...

  2. Java语言中的复合运算符会自动进行类型转换

    计算1/1-1/2+1/3+--+1/99-1/100 public class LoopControlExercise08{ public static void main(String[] arg ...

  3. 25js String(字符串)对象

    <!DOCTYPE html> <html lang="en">   <head>     <meta charset="UTF ...

  4. Go组件库总结之事件注册唤醒

    本篇文章我们用Go实现一个自定义事件注册并等待唤醒的机制,其中涉及到的链表操作可以参考上一篇文章.文章参考自:https://github.com/brewlin/net-protocol 1.自定义 ...

  5. oracle job的使用

    select job, next_date, next_sec, failures, broken from user_jobs; create or replace sequence END_RES ...

  6. (0303)怎么在sequence中调用agent中的函数以及如何快速实验你的想法?

    https://mp.weixin.qq.com/s/9hDz9-nur5szBib18_yPnA

  7. Nginx教程由浅入深

    Nginx   一.安装Nginx 1.准备工作 (1)打开虚拟机,使用远程连接工具连接 linux 操作系统 (2)到 nginx 官网下载软件 http://nginx.org/ 2.开始进行 n ...

  8. JUC续

    设计模式,保护性暂停.解耦 生产者消费者模式 park.unpark 线程状态转换 锁超时 锁超时可以解决哲学家就餐问题 公平锁 条件变量 线程控制顺序

  9. linux 的防火墙 ufw、firwalld、iptables 、

    防火墙综述 linux 防火墙,常用的包括三种:ufw . firewalld 和 iptables.学习难度依次递增. ufw 因为原生的 iptable 配置麻烦,学习成本较高. ufw全称 Un ...

  10. class_schedule

    #!/usr/bin/python # -*- coding: UTF-8 -*- class Schedule(object):          def __init__(self, name=& ...