【java】线程池简介

news2024/11/24 22:41:59

线程池简介

一、什么是线程池

线程池是一种利用池化技术思想来实现的线程管理技术,主要是为了复用线程、便利地管理线程和任务、并将线程的创建和任务的执行解耦开来。我们可以创建线程池来复用已经创建的线程来降低频繁创建和销毁线程所带来的资源消耗。

二、线程池的作用

线程创建是需要时间的,如果每次使用新线程的时候,都去创建线程,是比较耗时的。但是如果将线程先创建好,放到池子里面,用的时候直接从池子里面去取,就省略了创建线程的时间。这是一种使用空间来换取时间的策略。

另外,通过线程池,可以规定线程的名字,我可以知道我这个线程池当中有哪些线程执行了哪些任务,通过日志可以快速定位问题,便于管理。

三、线程池中的重要参数

  1. 核心线程数
    当线程池的线程都忙碌时,再进来新任务时,由最小线程数扩容到核心线程数

  2. 最小线程数
    项目启动的时候,初始化的线程数

  3. 最大线程数
    当核心线程数满了,当队列也满了,再来新任务,就会创建新线程来执行这个新任务,直到线程数达到最大线程数。

  4. 队列大小
    当线程数达到核心线程数,再进来的任务就会进入到队列,采用阻塞队列实现。

  5. 拒绝策略
    AbortPolicy(默认):丢弃任务并抛出 RejectedExecutionException 异常。
    CallerRunsPolicy:由调用线程处理该任务。(最稳妥)
    DiscardPolicy:丢弃任务,但是不抛出异常。可以配合这种模式进行自定义的处理方式。
    DiscardOldestPolicy:丢弃队列最早的未处理任务,然后重新尝试执行任务。

  6. 存活时间
    当线程超过多长时间不执行任务,处于空闲状态,线程池会将它回收,直到数量达到核心线程数。

四、线程池的工作原理

在这里插入图片描述

  1. 判断核心线程池是否已满,即已创建线程数是否小于核心线程数?没满则创建一个新的工作线程来执行任务。已满则进入下个流程。
  2. 判断工作队列是否已满?没满则将新提交的任务添加在工作队列,等待执行。已满则进入下个流程。
  3. 判断整个线程池是否已满,即已创建线程数是否小于最大线程数?没满则创建一个新的工作线程来执行任务,已满则交给拒绝策略来处理这个任务。

五、java中常见的线程池

newCachedThreadPool:
创建一个可缓存的无界线程池,如果线程池长度超过处理需要,可灵活回收空线程,若无可回收,则新建线程。当线程池中的线程空闲时间超过60s,则会自动回收该线程,当任务超过线程池的线程数则创建新的线程,线程池的大小上限为Integer.MAX_VALUE,可看作无限大。

newFixedThreadPool:
创建一个指定大小的线程池,可控制线程的最大并发数,超出的线程会在LinkedBlockingQueue阻塞队列中等待

newScheduledThreadPool:
创建一个定长的线程池,可以指定线程池核心线程数,支持定时及周期性任务的执行

newSingleThreadExecutor:
创建一个单线程化的线程池,它只有一个线程,用仅有的一个线程来执行任务,保证所有的任务按照指定顺序(FIFO,LIFO,优先级)执行,所有的任务都保存在队列LinkedBlockingQueue中,等待唯一的单线程来执行任务。

六、注意事项

  • 核心线程数一般为cpu的核数
  • 最大线程数一般设置为cpu的核数*2
  • 最先派给线程池的任务不一定最先执行
  • 阿里巴巴开发手册中强调在开发中只要使用多线程就需要用线程池去管理
  • 阿里巴巴开发手册中强调不允许使用Executors创建线程池

参考
https://blog.csdn.net/qq_40093255/article/details/116990431
https://blog.csdn.net/u013541140/article/details/95225769
《阿里巴巴java开发手册》

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

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

相关文章

通过zOffice SDK实现灵活的数据统计

我们通过zOffice收集的业务数据,如何进行分析统计呢?或许我们会想到数据透视表或者筛选的方式,这当然可以,但是在某些场景下,通过透视表统计有一定的难度,不够灵活,而zOffice SDK给我们提供了丰…

使用autossh实现内网穿刺

前言 需要在客户公司部署一套系统,要求是能公网访问,但是客户那边没有公网IP。所以打算打算使用autossh实现内网穿刺。 准备 硬件: 我需要一台有独立ip的公网服务器82.82.82.82(充当穿刺服务器),一台能…

EasyExcel时间处理时的bug,希望阿里不要不识好歹,尽快修复这个bug。

一、情况描述 我使用阿里的EasyExcel进行数据导入,但是我发现它录入的时间和表格上的数据不一样。Excel中录入的时间是7:30:00和21:20:00,但是实际读取的数据是7:30:00 上午,9:20:00 下午,导致我数据录入失…

【脚本工具】Python在MySQL批量造测试数据

测试过程中经常需要批量造一批数据,主要通过fake库来造测试数据,支持多国语言,注意使用的时候,各国具体情况 一、安装Faker 1、官方下载安装: URL:https://pypi.org/project/Faker/ 2、通过pip命令安装 …

5、Mysql事务原理

一、概述 事务:一组操作要么全部成功,要么全部失败,目的是为了保证数据最终的一致性。 数据库一般都会并发执行多个事务,多个事务可能会并发的对相同的一批数据进行增删改查操作,可能就会导致我们说的脏写、脏读、不可…

群辉助手Synology Assistant使用教程

下载 百度网盘链接直接下载即可 链接:https://pan.baidu.com/s/1XlQEcTCqBTsOgp-761jdOg?pwd5vyf 提取码:5vyf --来自百度网盘超级会员V5的分享 安装 直接双击安装,等待安装完成 能搜索到上图应用说明安装成功 使用 点击搜索按钮&…

浅谈餐饮业油烟在线监控系统的设计与研究

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 摘要:现阶段餐饮行业发展十分迅速,为了更好地提升餐饮油烟的监控力度,强化餐饮业油烟在线监控系统的设计成为重中之重。油烟在线监控系统的强化可以降低油烟的排放量,同时在排烟的…

【赠书】算力经济概念提出者的倾力之作,深刻诠释超级计算的未来!

目录 1.内容简介2.读者受众3.图书目录 如果说蒸汽机是工业革命的引擎,发电机是电气时代的引擎,那么计算机就是数字信息时代的引擎,而超级计算机是引领科学计算创新、攀登新高峰的引擎。 现在,公有云的发展如火如荼,云…

八、云尚办公系统-管理端-审批设置

云尚办公系统:管理端-审批设置 B站直达【为尚硅谷点赞】: https://www.bilibili.com/video/BV1Ya411S7aT 本博文以课程相关为主发布,并且融入了自己的一些看法以及对学习过程中遇见的问题给出相关的解决方法。一起学习一起进步!!…

Android处理内存泄漏

么是内存泄漏: 在Android开发过程中,当一个对象已经不需要再使用了,本该被回收时,而另个正在使用的对象持有它引用从而导致它不能被回收,这就导致本该被回收的对象不能被回收而停留在堆内存中,内存泄漏就产…

STM32外设系列—HC-05(蓝牙)

文章目录 一、蓝牙简介二、使用方法2.1 接线2.2 AT指令 三、蓝牙APP四、实战项目4.1 添加文件4.2 配置需要传递的参数4.3 获取返回值4.4 发送光照强度4.5 控制程序4.6 手机端页面设计4.6.1 新建调试工程4.6.2 设置通信变量4.6.3 编辑控件4.6.4 添加LED控制开关4.6.5 添加光照强…

Vue 时间转换

文章目录 将秒转换成简单时间格式方式一 表格渲染方式二 js转换 将时间转换为字符串方式一 年、月、日、时、分、秒、星期等信息方式二 返回多久之前的时间 将秒转换成简单时间格式 方式一 表格渲染 element-ui 表格为例&#xff0c;duration 单位为秒 <el-table-column …

Openresty原理概念篇(十一) 为什么要避免使用 NYI?

一 JIT编译器的死穴&#xff1a;为什么要避免使用 NYI ? ① 问题引入 1) 那么到底有哪些操作可以被 JIT,哪些不能呢?2) 怎样才可以避免写出不能被 JIT 的代码呢? ② 上节回顾 ③ 什么是 NYI&#xff1f; NYI函数 NYI完整的列表 ④ NYI列表中string库函数 说明&am…

sonarqube安装以及jenkins集成sonarqube

一、sonarqube安装 docker方式安装sonarqube docker 方式安装是最简便的&#xff0c;我选择了这个安装方式 1、下载镜像 docker pull postgres:latest docker pull sonarqube2、 创建挂载目录 #用于postgres的挂载目录 mkdir -p /opt/postgres/postgresql mkdir -p /opt/po…

慧博云通加入飞桨技术伙伴计划,共同推动企业AI应用创新

近日&#xff0c;慧博云通子公司慧博云通&#xff08;上海&#xff09;软件技术有限公司正式加入飞桨技术伙伴计划&#xff0c;双方将共同探索人工智能多场景创新应用&#xff0c;为企业提供智能化解决方案。 慧博云通 慧博云通科技股份有限公司&#xff08;股票代码&#x…

Pytorch分布式训练(一)

参考文献&#xff1a; 33、完整讲解PyTorch多GPU分布式训练代码编写_哔哩哔哩_bilibili pytorch进程间通信 - 文举的博客 (liwenju0.com) 前言 2023年&#xff0c;训练模型时&#xff0c;使用DDP&#xff08;DistributedDataParallel&#xff09;已经成为Pytorch炼丹师的标准…

sourcetree打开就闪退

1、问题分析 一直未出现如题描述情况&#xff0c;今早到公司可能是异常重启或者系统更新的愿意导致没有正常关机&#xff0c;出现了此种情况 2、问题解决 注&#xff1a;本文sourcetree安装在win11系统&#xff0c;win10等系统目录大同小异 ① (若快捷方式在桌面步骤①省略…

你的服务器还安全吗?用户数据是否面临泄露风险?

一系列严重的网络安全事件引起了广泛关注&#xff0c;多家知名公司的服务器遭到黑客挟持&#xff0c;用户的个人数据和敏感信息面临泄露的风险。这些事件揭示了网络安全的脆弱性和黑客攻击的威胁性&#xff0c;提醒着企业和个人加强对网络安全的重视。 一、入侵案例1.1 蔚来数据…

复习Javascript第二章

JavaScript 函数 JavaScript 函数是被设计为执行特定任务的代码块。 JavaScript 函数会在某代码调用它时被执行。 function myFunction(p1, p2) {return p1 * p2; // 该函数返回 p1 和 p2 的乘积 } JavaScript 函数语法 JavaScript 函数通过 function 关键词…

爆款视频生成器小程序源码搭建方案

爆款视频生成器是一种可以帮助用户快速制作出高质量视频的工具。它可以根据用户提供的素材、模板和音乐等要素&#xff0c;自动生成一个精美的视频。这种工具可以大大节省用户的时间和精力&#xff0c;同时还能够提高视频制作的效率和质量&#xff0c;使视频更易于被观众接受和…