首页 > 其他分享 >spring线程池ThreadPoolTaskExecutor

spring线程池ThreadPoolTaskExecutor

时间:2023-05-14 15:23:01浏览次数:44  
标签:String spring threadPoolProperties 线程 new threadPoolTaskExecutor ThreadPoolTaskE

1. 自定义yml属性配置

thread:
  pool:
    corePoolSize: 5
    maxPoolSize: 10
    queueCapacity: 10
    keepAliveSeconds: 120

2.自定义线程池配置类

@Configuration  //配置类
@EnableAsync //开线线程异步支持
public class MyThreadPoolExecutor {
@Autowired
private ThreadPoolProperty threadPoolProperties;
    @Bean(name = "threadPoolTaskExecutor")  //为线程使用提供实例
    public ThreadPoolTaskExecutor threadPoolTaskExecutor(){
        ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
        threadPoolTaskExecutor.setCorePoolSize(threadPoolProperties.getCorePoolSize());
        threadPoolTaskExecutor.setMaxPoolSize(threadPoolProperties.getMaxPoolSize());
        threadPoolTaskExecutor.setQueueCapacity(threadPoolProperties.getQueueCapacity());
        threadPoolTaskExecutor.setKeepAliveSeconds(threadPoolProperties.getKeepAliveSeconds());
        threadPoolTaskExecutor.setThreadNamePrefix("thread-pool-");  //方便查看
        return threadPoolTaskExecutor;
    }
}

3. 使用@Async创建线程实力

@Service
@Slf4j
public class AssetScanServiceImpl implements AssetScanService {
   /* @Autowired
    private MyThreadPoolExecutor myThreadPoolExecutor;*/
    @Override
    @Async("threadPoolTaskExecutor") //指定线程池
    public void beginScan() {
        //开启线程池启动任务每个任务为一个线程池   为了演示方便为每个指令一个线程
        String baidu = "ping www.baidu.com";
        String alibaba = "ping www.alibaba.com";
        String google = "ping www.google.com";
        ArrayList<String> list = new ArrayList<>();

        Collections.addAll(list,baidu,alibaba,google);
//        ThreadPoolTaskExecutor executor = myThreadPoolExecutor.threadPoolTaskExecutor();
        for (String command : list) {
//            executor.execute(() -> {
                try {
                    Process exec = Runtime.getRuntime().exec(command);
                    StringBuffer stringBuffer = new StringBuffer();
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(exec.getInputStream(), Charset.forName("GBK")));
                    //使用拼接一行在用正则取值
                    String str="";
                    while ((str=bufferedReader.readLine())!=null){
                        stringBuffer.append(str);
                    }
                    log.info(Thread.currentThread().getName()+stringBuffer);
                } catch (IOException e) {
                    e.printStackTrace();
                    log.error("脚本执行异常");
                }

//            });
        }
//        executor.setWaitForTasksToCompleteOnShutdown(true);  //判断无任务并关闭线程池
//        executor.shutdown();
    }
}

 

标签:String,spring,threadPoolProperties,线程,new,threadPoolTaskExecutor,ThreadPoolTaskE
From: https://www.cnblogs.com/caoaman/p/17399365.html

相关文章

  • java基于springboot+vue的房屋租赁管理系统、大学生租房管理系统,附源码+数据库+lw文档
    1、项目介绍根据大学生租房系统的功能需求,进行系统设计。前台功能:进入系统可以实现首页,房屋信息,房屋评价,公告资讯,个人中心,后台管理,意见反馈等功能进行操作;后台主要是管理员,房主和用户,主要功能包括首页,个人中心,房主管理,用户管理,房屋类型管理,房屋信息管理,预约看房管理,定金留房管......
  • 二、SpringCloud Alibaba使用RestTemplate
    新建模块Producer,pom.xml如下:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http......
  • SMU Spring 2023 Contest Round 3(2023年湘潭大学新生赛)
    ProblemA.签到啦从大到小排序,累加大于行李w时输出下标即可intans;voidsolve(){cin>>n>>m;intans=0;vector<int>a(n);for(inti=0;i<n;i++){cin>>a[i];}sort(a.begin(),a.end());reverse(a.begin......
  • SMU Spring 2023 Contest Round 1
    B.ContestPreparation#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<cstring>#include<vector>#include<queue>#include<set>#include<map>#defineinf0x3f......
  • SMU Spring 2023 Contest Round 2
    M.DifferentBilling#include<map>#include<set>#include<cmath>#include<queue>#include<cstdio>#include<vector>#include<climits>#include<cstring>#include<cstdlib>#include<......
  • Java的线程
    介绍线程线程是系统调度的最小单元,一个进程可以包含多个线程,线程是负责执行二进制指令的。每个线程有自己的程序计数器、栈(Stack)、寄存器(Register)、本地存储(ThreadLocal)等,但是会和进程内其他线程共享文件描述符、虚拟地址空间等。对于任何一个进程来讲,即便我们没有主动去创建......
  • maven创建springboot项目
    创建maven项目,pom.xml文件如下:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation=&......
  • Spring Boot 1.5.x 结合 JUnit5 进行接口测试
    在SpringBoot1.5.x中,默认使用Junit4进行测试。而在对Controller进行接口测试的时候,使用@AutoConfigureMockMvc注解是不能注入MockMvc对象的。因此只能使用WebApplicationContext类去构建MockMvc对象。在SpringBoot1.5.x+Junit4的前提下,测试类的代码是这样写的:@Sp......
  • Java:SpringBoot整合MyBatis-Plus实现MySQL数据库的增删改查
    MyBatis-Plus(简称MP)是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,为简化开发、提高效率而生。文档https://baomidou.com/目录一、引入坐标二、配置三、CURD测试四、API数据接口一、引入坐标<dependency><groupId>com.baomidou</groupId><artifactId>m......
  • 大公司为什么禁止SpringBoot项目使用Tomcat?
    前言在SpringBoot框架中,我们使用最多的是Tomcat,这是SpringBoot默认的容器技术,而且是内嵌式的Tomcat。同时,SpringBoot也支持Undertow容器,我们可以很方便的用Undertow替换Tomcat,而Undertow的性能和内存使用方面都优于Tomcat,那我们如何使用Undertow技术呢?本文将为大家细细讲解。Spr......