Java多线程(七)

目录

一、线程池参数介绍

二、线程池的工作流程

三、使用Executors创建常见的线程


一、线程池参数介绍

为了深入的了解线程池,这里就需要明白线程中的各种参数的含义。下述的图片中是来自于Java标准库中对线程池描述。

1.corePoolSize 与 maximumPoolSize

其中corePoolSize是当前线程池中核心线程的数量maximumPoolSize是当前线程池中最大的线程量。一个线程池中为了效率最大化往往会创建出多个线程,这里最多的线程指的就是maximumPoolSize。但是当任务处理完之后,多个线程可能会消耗资源,所以就会销毁掉其他的非核心线程。

2.keepAliveTime 与 unit

当线程池中任务量不是很大的时候,这时候会考虑销毁掉部分的非核心线程。而这里的keepAliveTime就是非核心线程没有任务时的最大存活时间,如果在存活时间内又来了任务就不会销毁线程。这里的unit是存活时间的单位,例如毫秒、秒等。

3.workQueue 与 threadFactory

workQueue指的是阻塞队列,在线程池中可以使用内置的阻塞队列,也可以使用自定义的阻塞队列。threadFactory是工厂模式,通过这个工厂类来创建线程。

4.RejectedExecutionHandler handler

线程池中的拒绝策略,为了详细的认识拒绝策略,继续参考Java标准库。

ThreadPoolExecutor.AbortPolicy 

直接抛出异常,终止线程池中所有的线程

ThreadPoolExecutor.CallerRunsPolicy

线程池将任务抛回,即哪个线程添加的任务就由哪个线程去执行,该任务还是要执行的

ThreadPoolExecutor.DiscardOldestPolicy

丢弃最早的任务,执行新的任务。这里就直接将最早的任务抛弃不执行了

ThreadPoolExecutor.DiscardPolicy

放弃新的任务,继续执行原来的任务。直接将新任务放弃不执行了

二、线程池的工作流程

在创建线程池的过程中,会直接创建好很多线程。当需要使用线程的时候,直接从线程池中取一个就行了,使用完了之后直接归还到线程中。

当出现任务量小于线程池中的核心线程数时就不会创建额外的线程,但是当线程数量小于任务量时,就会开始创建线程去解决这些任务,但是创建出来的线程也不会超过最大线程数量。同时,当阻塞队列中的任务满了之后,还有任务需要去解决,这时候已经创建不出来额外的线程了,就需要使用拒绝策略。

三、使用Executors创建常见的线程

Executors 创建线程池的几种方式

  • newFixedThreadPool: 创建固定线程数的线程池
  • newCachedThreadPool: 创建线程数目动态增长的线程池.
  • newSingleThreadExecutor: 创建只包含单个线程的线程池.
  • newScheduledThreadPool: 设定 延迟时间后执行命令,或者定期执行命令. 是进阶版的 Timer.

Executors 本质上是 ThreadPoolExecutor 类的封装

    ExecutorService service = Executors.newFixedThreadPool(10);
    service.submit(new Runnable(){
        @Override
        public void run() {
            System.out.println("hello");
        }
    });
  • 使用 Executors.newFixedThreadPool(10) 能创建出固定包含 10 个线程的线程池.
  • 返回值类型为 ExecutorService
  • 通过 ExecutorService.submit 可以注册一个任务到线程池中.

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

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

相关文章

pytorch模型转化为tensorflow模型

前言 目前大多数模型都是pytorch格式,部署上很多tfserving用的比较多,因此模型格式需要是save_model.pb的格式,本篇文章介绍将pytorch转化为tensorflow格式模型方式。 核心过程:pytorch>onnx>tensorflow 一、pytorch转onn…

git clean 命令

git clean -n //显示要删除的文件,clean的演习,告诉哪些文件删除,只是一个提醒。 git clean -dn //显示要删除的文件和目录 git clean -f //删除未追踪的文件 git clean -dff //删除未追踪的目录 git clean -df //清除所有未跟踪文件&#xf…

开源数据集分类汇总(医学,卫星,分割,分类,人脸,农业,姿势等)

本文汇总了医学图像、卫星图像、语义分割、自动驾驶、图像分类、人脸、农业、打架识别等多个方向的数据集资源,均附有下载链接。 该文章仅用于学习记录,禁止商业使用! 1.医学图像 疟疾细胞图像数据集 下载链接:http://suo.nz/2V…

Java基础(七)排序算法

排序 1. 冒泡排序 >> 冒泡排序的思想 冒泡排序是一种简单的排序算法,其基本思想是通过多次遍历待排序序列,依次比较相邻的元素并交换位置,使得每次遍历后最大(或最小)的元素冒泡到序列的末尾。具体步骤如下&a…

uniapp发布插件显示components/xxx文件没找到,插件格式不正确

uniapp发布插件显示components/xxx文件没找到,插件格式不正确 将插件文件这样一起选中,然后右键压缩成zip文件,而不是外层文件压缩

构建Docker容器监控系统 (1)(Cadvisor +InfluxDB+Grafana)

目录 Cadvisor InfluxDBGrafana 1. Cadvisor 2.InfluxDB 3.Grafana 开始部署: 下载组件镜像 创建自定义网络 创建influxdb容器 创建数据库和数据库用户 创建Cadvisor 容器 准备测试镜像 创建granafa容器 访问granfana 添加数据源 Add data source 新建 …

[HDBits] Exams/m2014 q4h

Implement the following circuit: module top_module (input in,output out);assign outin; endmodule

ArcGISPro中如何使用机器学习脚本

点击工程 打开包管理器,我们可以发现,无法修改ArcGIS自带的默认python环境,所以我们需将默认环境进行克隆 点击设置 设置要克隆的地方,点击确定 激活克隆的环境,然后重写启动ArcGISPro 搜索并点击需要安装的库&#xf…

nacos2.2.3 删除永久实例

问题描述 在nacos2.2.3中删除非临时性实例 报错 解决方案 在命令行下执行命令: curl -X DELETE "http://127.0.0.1:8848/nacos/v1/ns/instance?serviceNamenacos-restTemplate-stock&groupNameDEFAULT_GROUP&namespaceIdpublic&ip192.168.1…

分布式问题

1. 分布式系统CAP原理 CAP原理:指在一个分布式系统中,Consistency(一致性)、Availability(可用性)、Partitontolerance(分区容忍性),三者不可得兼。 一致性(C…

【MongoDB】索引

目录 一、概述 二、索引的类型 1、单字段索引 2、复合索引 3、其他索引 三、索引的管理 1、索引的创建 2、索引的查看 3、索引的删除 四、索引的使用 1、执行计划 2、涵盖的查询 一、概述 索引支持在MongoDB中高效地执行查询。如果没有索引,MongoDB必须…

消息队列 (9)-消费者核心类的实现

目录 前言消费者类设计思路核心API总体代码 前言 我们上一篇博客,写了虚拟主机的实现, 在虚拟主机中需要用到俩个未实现的类,分别是验证绑定关键字和消费者类,接下来我们实现消费者类的核心代码 消费者类设计思路 在这个类中,首先我们要持有virtualHost对象来操作数据, 然后…

Vue.js2+Cesium1.103.0 六、标绘与测量

Vue.js2Cesium1.103.0 六、标绘与测量 点,线,面的绘制,可实时编辑图形,点击折线或多边形边的中心点,可进行添加线段移动顶点位置等操作,并同时计算出点的经纬度,折线的距离和多边形的面积。 De…

问世28年经久不衰,大厂为何独爱这门技术?(文末送书5本)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

聚焦AIGC与大模型,和鲸ModelWhale荣登“2023数字生态500强”优秀案例解决方案榜单

8月4日,2023 数字生态大会在北京盛大举行,大会聚焦并锁定 AIGC 及大模型热点,以“ AIGC 新生态 数智新时代”为主题,由 B.P 商业伙伴联合盛景网联共同举办。 为深入发挥在产业领域的启迪借鉴价值作用,本次大会重磅发布…

专业商城财务一体化-线上商城+进销存管理软件,批发零售全行业免费更新

订货流程繁琐?订单处理效率低?小程序商城与进销存系统不打通?数据需要手动输入同步?财务与的结算对账需要大量手工处理?零售批发从业者,如何你也有以上烦恼,可以看看进销存小程序订货商城&#…

如何调教让chatgpt读取自己的数据文件(保姆级图文教程)

提示:如何调教让chatgpt读取自己的数据文件(保姆级图文教程) 文章目录 前言一、如何投喂自己的数据?二、调教步骤总结 前言 chatgpt提示不能读取我们提供的数据文件,我们应该对它进行调教。 一、如何投喂自己的数据? 让chatgpt读…

数据结构--BFS求最短路

数据结构–BFS求最短路 BFS求⽆权图的单源最短路径 注:⽆权图可以视为⼀种特殊的带权图,只是每条边的权值都为1 以 2 为 b e g i n 位置 以2为begin位置 以2为begin位置 代码实现 //求顶点u到其他顶点的最短路径 void BFS_MIN_Distance(Graph G, int u…

SDU Crypto School - 计算不可区分性1

Encryption: Computational security 1-4 主讲人:李增鹏(山东大学) 参考教材:Jonathan Katz, Yehuda Lindell, Introduction to Modern Cryptography - Principles and Protocols. 什么是加密 首先,加密方案的目的在于…

Electron+vue3项目使用SQLite3数据库

SQLite 是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,我们不需要在系统中配置。 就像其他数据库,SQLite 引擎不是一个独立的进程&am…