并发编程——线程池

1.概述

如果并发的线程过多,而且执行的时间都非常短,如果这样,每次都要创建线程就会大大降低效率,我们可以通过线程池来解决,JDK5增加了内置线程池ThreadPollExecutor。

2.线程池的优点

1.重复利用,降低了线程频繁创建销毁消耗的时间。

2.统一的线程管理,由线程池来负责。

3.ThreadPollExecutor构造方法中各个参数的意义

  • corePoolSize:核心池的大小,默认情况下,刚创建出线程池,线程池的大小为0,来一个任务创建一个线程,除非事先创建好预备的线程。

  • maximumPoolSize:线程池的最大线程数,核心和非核心线程的总和。

  • keepAliveTime非核心池中非核心线程的保存时间

  • unit:keepAliveTime的时间单位。

  • workQueue:一个阻塞的队列,里面存放的是等待到核心池获取线程的任务。

  • threadFactory:线程工厂,用来创建线程。

  • handler:表示拒绝处理任务的策略,有四种。

4.线程池的执行

执行流程

当一个任务要被执行时,会先看核心线程池是否已满,如果未满,则从核心池中获取线程,如果核心池满了,则尝试去添加到队列中,等待获取核心线程中中的资源,如果队列已满,则看非核心线程池是否已满,如果未满,则从非核心线程池中获取线程,如果非核心线程都满了,则需要执行拒绝任务的策略。

5.线程池中的队列

  • ArrayBlockingQueue:有一个数组实现的有界队列,创建时必须设置初始大小,按照先来后到的方式执行。

  • LinkedBlockingQueue:基于链表实现的队列,默认容量是Integer.MAX_VALUE,也可手动设置,按照先来后到的方式执行。

6.线程池的4种拒绝策略

  • AbortPolicy:直接抛出异常,阻止正常的工作。

  • DiscardOleddestPolicy:丢弃等待时间最长的任务。

  • DiscardPolicy:直接丢弃,不执行。

  • CallerRunsPolicy:交由提交任务的线程执行任务(例如:main)。

7.execute 与 submit 执行任务的区别

execute没有返回值,submit有返回值,通过get方法获取。

8.shutdownNow和shutdown关闭线程池方法的区别

shutdownNow表示现在立刻停止所有任务,对等待执行的任务全部取消。

shutdown表示停止再接收新的任务,还未执行完的任务继续执行。

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

复现YOLOv5改进最新MPDIoU:有效和准确的边界盒回归的损失,打败G/E/CIoU,效果明显!!!

MPDIoU: A Loss for Efficient and Accurate Bounding Box Regression 论文简介MPDIoU核心设计思路论文方法实验部分加入YOLOv5代码论文地址:https://arxiv.org/pdf/2307.07662.pdf 论文简介 边界盒回归(Bounding box regression, BBR)广泛应用于目标检测和实例分割,是目标…

软件测试员,面试常见的18个问题(记得收藏!)

软件测试面试18个常见问题汇总 Q1:项目中相关需求问题,测试可以直接和客户沟通吗? A1:可以,最初与客户沟通需求时,测试人员直接参与,所以我们可以直接和客户方的代表开会进行沟通。 A2&#xff…

HTTP——二、简单的HTTP协议

本章将针对 HTTP 协议结构进行讲解,主要使用HTTP/1.1版本。学完这章,想必大家就能理解 HTTP 协议的基础了。 HTTP 一、HTTP协议用于客户端和服务器之间的通信二、通过请求和响应的交换达成通信三、HTTP是不保存状态的协议四、请求URI定位资源五、告知服…

【云原生】一文学会Docker存储所有特性

目录 1.Volumes 1.Volumes使用场景 2.持久将资源存放 3. 只读挂载 2.Bind mount Bind mounts使用场景 3.tmpfs mounts使用场景 4.Bind mounts和Volumes行为上的差异 5.docker file将存储内置到镜像中 6.volumes管理 1.查看存储卷 2.删除存储卷 3.查看存储卷的详细信息…

“程序员求职攻略:IT技术岗面试的必备技巧“

文章目录 每日一句正能量前言分享面试IT公司的小技巧IT技术面试有哪些常见的问题?分享总结遇到过的面试题后记 每日一句正能量 人活一世,不在乎朋友多少,不问财富几车,关键看在你最困难的时候,是否有一个伸出援手的人&…

按键消抖(有/无状态机)

一,理论概念 按键抖动 按键抖动:按键抖动通常的按键所用开关为机械弹性开关,当机械触点断开、闭合时,由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会一下子断开。因而在闭…

哥大Salesforce重磅发布!最丰富的统一对话数据集,几乎支持所有对话任务

夕小瑶科技说 原创 作者 | 小戏、Python 尽管以 ChatGPT 为代表的对话式人工智能概念炒的火热,但是事实上作为当下智能发动机的大模型,其真正的动力源泉——数据集——仍然面临诸多困难。 所谓 Garbage In, Garbage Out,这条数据科学的朴素…

Linux复习——基础知识

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 1. 有关早期linux系统中 sysvin的init的7个级别描述正确的是( )[选择1项] A. init 1 关机状态 B. init 2 字符界面多用户模式 …

要单片机和RTOS有必要学习嵌入式linux吗?

学习嵌入式 Linux 是否有必要,取决于你的项目需求和职业发展目标。以下是一些考虑因素: 项目需求:如果你的项目需要处理复杂的网络、文件系统、多任务管理等功能,嵌入式 Linux 可能是更适合的选择。Linux 提供了丰富的开源软件包和…

排序算法汇总

每日一句:你的日积月累终会成为别人的望尘莫及 目录 常数时间的操作 选择排列 冒泡排列 【异或运算】 面试题: 1)在一个整形数组中,已知只有一种数出现了奇数次,其他的所有数都出现了偶数次,怎么找到…

为何押注AI大模型的微软云,业绩增速反而不如谷歌云?

科技云报道原创。 上周微软、谷歌、Meta等国外科技公司相继发布最新财报。作为与人工智能、云计算和数字广告等领域相关的巨头,它们的一举一动都将对市场产生影响,同时也吸引着众多从业者的关注。 在国外三大云巨头中,谷歌云的市场份额长期…

渗透测试:Linux提权精讲(二)之sudo方法第二期

目录 写在开头 sudo expect sudo fail2ban sudo find sudo flock sudo ftp sudo gcc sudo gdb sudo git sudo gzip/gunzip sudo iftop sudo hping3 sudo java 总结与思考 写在开头 本文在上一篇博客的基础上继续讲解渗透测试的sudo提权方法。相关内容的介绍与背…

docker 部署 mysql8.0 无法访问

文章目录 🗽先来说我的是什么情况🪁问题描述🪁解决方法:✔️1 重启iptables✔️2 重启docker 🪁其他有可能连不上的原因✔️1 客户端不支持caching_sha2_password的加密方式✔️2 my.conf 配置只有本机可以访问 &#…

CTF:信息泄露.(CTFHub靶场环境)

CTF:信息泄露.(CTFHub靶场环境) “ 信息泄露 ” 是指网站无意间向用户泄露敏感信息,泄露了有关于其他用户的数据,例如:另一个用户名的财务信息,敏感的商业 或 商业数据 ,还有一些有…

读取application-dev.properties的中文乱码【bug】

读取application-dev.properties的中文编码【bug】 2023-7-30 22:37:46 版权 禁止其他平台发布时删除以下此话 本文首次发布于CSDN平台 作者是CSDN日星月云 博客主页是https://blog.csdn.net/qq_51625007 禁止其他平台发布时删除以上此话 bug 读取application-dev.propert…

2023年的深度学习入门指南(20) - LLaMA 2模型解析

2023年的深度学习入门指南(20) - LLaMA 2模型解析 上一节我们把LLaMA 2的生成过程以及封装的过程的代码简单介绍了下。还差LLaMA 2的模型部分没有介绍。这一节我们就来介绍下LLaMA 2的模型部分。 这一部分需要一些深度神经网络的基础知识,不懂的话不用着急&#xf…

建木使用进阶-创建密钥管理

阿丹: 第一次我们进入建木,第一件事情就是配置我们相关的密钥。 解读: 在建木中我们可以进行创建密钥来对我们服务器等密码进行方便的管理。 注意: 登录的时候账号为:admin 密码为:123456 这是初始…

Windows环境下git客户端中的git-bash和MinGW64

我们在 Windows10 操作系统下,安装了 git 客户端之后,可以通过 git-bash.exe 打开一个 shell: 执行一些 linux 系统里的命令: 注意到上图紫色的 MINGW64. Mingw-w64 是原始 mingw.org 项目的改进版,旨在支持 Window…

【playbook】Ansible的脚本----playbook剧本

Ansible的脚本----playbook剧本 1.playbook剧本组成2.playbook剧本实战演练2.1 实战演练一:给被管理主机安装Apache服务2.2 实战演练二:使用sudo命令将远程主机的普通用户提权为root用户2.3 实战演练三:when条件判断指定的IP地址2.4 实战演练…

SpringBoot中ErrorPage(错误页面)的使用--【ErrorPage组件】

SpringBoot系列文章目录 SpringBoot知识范围-学习步骤–【思维导图知识范围】 文章目录 SpringBoot系列文章目录本系列校训 SpringBoot技术很多很多环境及工具:必要的知识深层一些的知识 上效果图在Spring Boot里使用ErrorPage还要注意的是 配套资源作业&#xff…