【JUC】SpringBoot使用线程池的两种方式 注解和注入

news2024/11/15 11:27:44

学习笔记

  • 一、ThreadPoolTaskExecutor与ThreadPoolExecutor的区别
  • 二、编写配置文件ThreadPoolConfig
  • 二、编写Controller
  • 三、编写Service
    • 3.1、注解
    • 3.1、注入

一、ThreadPoolTaskExecutor与ThreadPoolExecutor的区别

ThreadPoolExecutor 是JDK自1.5添加的线程池。
ThreadPoolTaskExecutor是Spring的线程池【本文使用的】。
Spring线程池ThreadPoolTaskExecutor其实是对JDK线程池ThreadPoolExecutor的一个封装。

二、编写配置文件ThreadPoolConfig

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

import java.util.concurrent.*;

@Configuration
public class ThreadPoolConfig {
    /** 核心线程数(默认线程数) */
    private static final int CORE_POOL_SIZE = 20;
    /** 最大线程数 */
    private static final int MAX_POOL_SIZE = 50;
    /** 允许线程空闲时间(单位:默认为秒) */
    private static final int KEEP_ALIVE_TIME = 10;
    /** 缓冲队列大小 */
    private static final int QUEUE_CAPACITY = 200;
    /** 线程池名前缀 */
    private static final String THREAD_NAME_PREFIX = "ThreadPool-";

    @Bean("taskExecutor") // bean的名称,默认为首字母小写的方法名
    public ThreadPoolTaskExecutor taskExecutor(){
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(CORE_POOL_SIZE);
        executor.setMaxPoolSize(MAX_POOL_SIZE);
        executor.setQueueCapacity(QUEUE_CAPACITY);
        executor.setKeepAliveSeconds(KEEP_ALIVE_TIME);
        executor.setThreadNamePrefix(THREAD_NAME_PREFIX);

        // 线程池对拒绝任务的处理策略
        // CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
        // 初始化
        executor.initialize();
        return executor;
    }
}

二、编写Controller

import com.ynx.exarejuc.service.HelloService;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.annotation.Resource;

@RestController
public class HelloController {

    @Resource
    private HelloService helloService;

    @RequestMapping("/hello100")
    public void sayHello100() throws InterruptedException {
        for (int i = 1; i <100 ; i++) {
            helloService.hello();
        }
    }
}

三、编写Service

3.1、注解

在使用多线程方法上标注@Async时表明调用的线程池 同时在类上和application类上加上@EnableAsync

通过这个@Async注解的方式去异步调用的

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.concurrent.Executor;

@EnableAsync
@Service
public class HelloService {
   
    //在使用多线程方法上标注@Async时表明调用的线程池 同时在类上和application类上加上@EnableAsync,如下
    @Async("taskExecutor")
    public void  hello() throws InterruptedException {
        System.out.println(Thread.currentThread().getName() + "处理任务ing...");
    }
}

访问http://localhost:8080/hello100
在这里插入图片描述

3.1、注入

import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.concurrent.Executor;

@Service
public class HelloService {
    @Resource(name = "taskExecutor")
    private Executor taskExecutor;
    
    public void hello(){
        taskExecutor.execute(()->{
            System.out.println(Thread.currentThread().getName() + "处理任务ing...");
        });
    }
}

访问http://localhost:8080/hello100
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/56196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

排序算法:插入排序,选择排序,冒泡排序

插入排序 一般来说&#xff0c;插入排序都采用in-place在数组上实现。具体算法描述如下&#xff1a; 步骤1: 从第一个元素开始&#xff0c;该元素可以认为已经被排序&#xff1b; 步骤2: 取出下一个元素&#xff0c;在已经排序的元素序列中从后向前扫描&#xff1b; 步骤3: 如…

[附源码]计算机毕业设计-中国传统手工艺销售平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]计算机毕业设计JAVA校园失物招领平台

[附源码]计算机毕业设计JAVA校园失物招领平台 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

李峋同款会动的爱心Python代码版

最近看到不少关于李峋同款爱心的视频、文章&#xff0c;今天我们也分享一下李峋同款爱心 Python 代码版。要问李峋是谁&#xff1f;我也不太清楚&#xff0c;大家可自行百度&#xff0c;这个是我百度的结果&#xff0c;仅供参考。 简单来说李峋同款爱心就是一个动态的♥型效果&…

【STM32学习(1)】详解STM32时钟体系

一、8051和stm32时钟体系结构区别 HSE&#xff1a;外部高速的振荡时钟&#xff08;8MHZ&#xff09; HSI&#xff1a;内部高速的振荡时钟&#xff08;16MHZ&#xff09; LSI&#xff1a;内部低速的振荡时钟&#xff08;32KHZ&#xff09; LSK&#xff1a;外部低速的振荡时钟&a…

HTML+CSS+JS静态网页设计【篮球NBA介绍体育运动】web前端学生作业源码

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【学习笔记】DDD领域驱动设计篇

【学习笔记】DDD领域驱动设计篇 文章目录【学习笔记】DDD领域驱动设计篇什么是DDD&#xff1f;DDD的优缺点DDD的架构框架详解User Interface层application层domain层infrastructure层结语什么是DDD&#xff1f; DDD 是 Domain driven design &#xff08;领域驱动设计&#xf…

GIS工具maptalks开发手册(四)02——渲染地图信息框之添加绘制工具 获取面的坐标数据信息框进行展示 渲染图片的两种方式

GIS工具maptalks开发手册(四)02——渲染地图信息框之添加绘制工具 & 获取面的坐标数据信息框进行展示 & 渲染图片的两种方式 效果-获取面的坐标 效果-渲染图片的2种方式 代码 index.html <!DOCTYPE html> <html> <meta charset"UTF-8">…

[附源码]计算机毕业设计springboot校园招聘系统设计

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

家装家居行业该如何进行网络推广?

咱们这里谈家居家装行业&#xff0c;指得是置办新家的大件产品&#xff0c;不是锅碗瓢盆&#xff0c;也不是床单被罩那些。如衣柜、橱柜、灯具、智能马桶、窗户、瓷砖、沙发、床等等这些是咱们讨论的范围。 在家装家居行业中&#xff0c;每个产品的客单价通常很高&#xff0c;回…

更改 HIVE 表字段数据类型有哪些注意事项?

更改 HIVE 表字段数据类型有哪些注意事项&#xff1f; 1. 使用 HIVE 表的常见规范 在大数据离线分析场景中&#xff0c;在数据建模/表格式这一层&#xff0c;目前使用最多的还是 APACHE HIVE 这一数据仓库框架&#xff08;湖仓一体的框架&#xff0c;如 Iceberg/DeltaLake/Hu…

深入理解 Web 协议:HTTP 2

目录 本篇将详细介绍 http2 协议的方方面面&#xff0c;知识点如下&#xff1a; HTTP 2 连接的建立 HTTP 2 中帧和流的关系 HTTP 2 中流量节省的奥秘&#xff1a;HPACK 算法 HTTP 2 协议中 Server Push 的能力 HTTP 2 为什么要实现流量控制&#xff1f; HTTP 2 协议遇到的…

记一次PDU接室外监控溶解事故

近期要新增20-30个室外监控&#xff0c;监控位于山道&#xff0c;山道长约1000米&#xff0c;根据以往惯例&#xff0c;要求从UPS接电。 室外设备箱如图&#xff1a; 施工方从UPS接电后&#xff0c;直接接接线板&#xff0c;从接线板接两个220V-24V海康监控电源&#xff0c;电…

MySQL8高级

MySQL8高级 一、Linux下MySQL的安装与使用 1、版本说明 MySQL Community Server 社区版本&#xff0c;开源免费&#xff0c;自由下载&#xff0c;但不提供官方技术支持&#xff0c;适用于大多数普通用户。MySQL Enterprise Edition 企业版本&#xff0c;需付费&#xff0c;不能…

软件测试基础-自动化测试技术

今天跟大家分享软件测试基础&#xff0c;自动化测试技术&#xff0c;主要从引入自动化测试的原因、自动化测试的定义、自动化测试的优势、自动化测试的劣势、自动化测试的工具五个方面来讲述。 01 引入自动化测试的原因 软件规模越来越大&#xff0c;用户对软件的质量要求越来…

基于PHP+MYSQL药店会员管理系统的设计与实现

药房会员管理系统是信息时代的产物,随着时代的发展,各大药店也与时俱进使用了各类现代化的系统来进行各类药品和会员信息的管理,甚至有些药店会给会员使用积分系统,根据用户的消费进行积分,然后用积分兑换一些差用的日常用品或者药品,从而增加会员的黏度。 PHP&#xff1a;MYSQ…

[SpringMVC1]简介与快速入门案例详解

文章目录 一、SpringMVC简介 1.概述 2.三大模块 二、SpringMVC快速入门 1.准备工作 &#xff08;1&#xff09;新建Maven项目&#xff0c;选择webapp模板 &#xff08;2&#xff09;新增java源文件包 2.开始配置SpringMVC (1)在pom.xml中导入相关坐标以下载需要用到的依赖…

[附源码]计算机毕业设计JAVA鞋店销售管理

[附源码]计算机毕业设计JAVA鞋店销售管理 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis M…

SpringBoot旅游网源码和论文java旅游管理系统

随着人们生活水平的不断提升&#xff0c;人们对旅游的需求越来越旺盛&#xff0c;对旅游产品 和服务的质量要求也越来越高。伴随着计算机技术、网络技术的不断普及与应用&#xff0c; 人们通过网络浏览旅游信息&#xff0c;预订旅游产品&#xff0c;交流旅游体验的活动越来越多…

AI生命科学绘图(4):质粒图谱的绘制

学习来源 &#xff1a;B站生信师兄 内容&#xff1a;质粒图谱绘制 质粒绘制思路 1.绘制俩个正圆轮廓&#xff0c;修改描边颜色和粗细 选择椭圆工具&#xff1a;按住shift绘制一个正圆&#xff0c;然后Alt拖动复制 拖动使得俩个圆重合 2.使用剪刀工具&#xff0c;修剪掉不需要…