Java多线程入门到精通学习大全?了解几种线程池的基本原理、代码示例!(第五篇:线程池的学习)

news2024/10/6 6:48:22

本文介绍了Java中三种常用的线程池:FixedThreadPool、CachedThreadPool和ScheduledThreadPool,分别介绍了它们的原理、代码示例以及使用注意事项。FixedThreadPool适用于并发量固定的场景,CachedThreadPool适用于执行时间短的任务,ScheduledThreadPool适用于定时任务和周期性任务。在使用线程池时需要注意线程池的使用场景和线程池中线程的数量,同时在关闭线程池时需要等待已提交任务执行完成后再关闭。
线程池有三种:FixedThreadPool、CachedThreadPool和ScheduledThreadPool。

一、FixedThreadPool

1 原理:

创建一个固定大小的线程池,线程池中的线程数始终固定不变。当有新的任务提交时,如果线程池中有空闲的线程,则立即执行;如果没有,则把任务放入任务队列等待执行。

2 代码示例:

ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
    executor.execute(new MyRunnable());
}
executor.shutdown();

3 注意事项:

  1. 固定大小的线程池适用于任务数量已知且相对固定的情况。
  2. 如果所有线程都在执行任务,新的任务会被暂时放入任务队列等待执行,如果任务队列已满则会抛出任务拒绝异常RejectedExecutionException。
  3. 执行shutdown()方法后,线程池不会再接受新的任务,但已提交的任务会继续执行,直到所有任务执行完毕。

二、CachedThreadPool

1 原理:

创建一个可缓存的线程池,线程池中的线程数可以根据需要进行自动扩展或缩减。当有新的任务提交时,如果有空闲的线程则会立即执行,如果没有则会创建新的线程执行任务。
代码示例:

ExecutorService executor = Executors.newCachedThreadPool();
for (int i = 0; i < 10; i++) {
    executor.execute(new MyRunnable());
}
executor.shutdown();

2 注意事项:

  1. 可缓存的线程池适用于执行时间较短的任务。
  2. 如果在执行任务时有空闲线程,则会利用空闲线程执行任务,否则会创建新的线程执行任务。
  3. 当线程池中的线程数超过任务的数目时,空闲的线程会自动销毁。

三、ScheduledThreadPool

1 原理:

创建一个定长线程池,支持定时及周期性任务执行。当有新的任务提交时,线程池会安排线程执行任务,如果当前线程正在执行任务,则会等待任务执行完成后再执行下一个任务。

2 代码示例:

ScheduledExecutorService executor = Executors.newScheduledThreadPool(5);
executor.schedule(new MyRunnable(), 5, TimeUnit.SECONDS);
executor.shutdown();

3 注意事项:

  1. 定时任务和周期性任务的执行时间不一定精确,会受到线程池中线程的数量和运行状态的影响。
  2. 如果定时任务和周期性任务的执行时间过长或抛出异常,则会影响后续任务的执行。
  3. 执行shutdown()方法后,线程池会等待已提交任务执行完成后再关闭,如果需要立即关闭线程池可以使用shutdownNow()方法。

四、总结:

线程池有三种:FixedThreadPool、CachedThreadPool和ScheduledThreadPool。FixedThreadPool适用于并发量固定的场景,CachedThreadPool适用于执行时间短的任务,ScheduledThreadPool适用于定时任务和周期性任务。在使用线程池时需要注意线程池的使用场景和线程池中线程的数量,避免线程池满载时出现任务拒绝的异常。同时,在关闭线程池时需要等待已提交任务执行完成后再关闭。
在这里插入图片描述

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

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

相关文章

Linux C/C++后台开发面试重点知识

Linux C/C后台开发面试重点知识 文章转载自个人博客: Linux C/C后台开发面试重点知识 查看目录 一、C 面试重点 本篇主要是关于 C 语言本身&#xff0c;如果是整个后台技术栈的学习路线&#xff0c;可以看这篇文章: Linux C 后台开发学习路线 对于 C 后台开发面试来说&…

27岁转行学云计算值得吗?能就业不?

27岁转行学云计算值得吗&#xff1f;能就业不&#xff1f; 首先&#xff0c;云计算当然值得转行了&#xff0c;如此肯定的观点&#xff0c;应该没有人会反对吧&#xff0c;尤其是对IT行业的现状以及就业市场有所了解的人。如果你对这一点有所怀疑也很正常&#xff0c;只要通过各…

Spring Boot集成ShardingSphere分片利器 AutoTable (一)—— 简单体验 | Spring Cloud 45

一、背景 Sharding是 Apache ShardingSphere 的核心特性&#xff0c;也是 ShardingSphere 最被人们熟知的一项能力。在过去&#xff0c;用户若需要进行分库分表&#xff0c;一种典型的实施流程&#xff08;不含数据迁移&#xff09;如下&#xff1a; 用户需要准确的理解每一张…

详解快速排序的类型和优化

详解快速排序的优化 前言快排的多种写法霍尔法实现快排代码部分 挖坑法思路讲解代码部分 双指针法思路讲解代码部分 针对排序数类型的优化针对接近或已经有序数列和逆序数列三数取中代码实现 随机数 针对数字中重复度较高的数三路划分思路讲解代码部分 根据递归的特点进行优化插…

JSP招投标管理系统myeclipse开发mysql数据库WEB结构java编程

一、源码特点 JSP 招投标管理系统 是一套完善的web设计系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 JSP招投标管理系统myeclipse开发mysql数据库W 二、功能介绍 主要功能&#xff1a; …

BPMN2.0 任务-接收任务手动任务

接收任务 接收任务是一个简单的任务,它等待特定消息的到来。 当流程执行到接收任务时,流程状态将提交给持久性存储。流程将保持这种等待状态,直到流程引擎接收到特定的消息,这将触发接收任务之外流程的继续进行。 接收任务用左上角有一个消息图标的标准BPMN 2.0任务(圆角…

C++新特性总结

&#xff08;智能指针&#xff0c;一些关键字&#xff0c;自动类型推导auto&#xff0c;右值引用移动语义完美转发&#xff0c;列表初始化&#xff0c;std::function & std::bind & lambda表达式使回调更方便&#xff0c;c11关于并发引入了好多好东西&#xff0c;有&am…

vivado工程转换到quartus下联合modelsim仿真

vivado用习惯了&#xff0c;现在快速换到quartus下仿真测试。写一个操作文档&#xff0c;以fpga实现pcm编码为例。 目录 一、建立工程 1、准备源码和仿真文件 2、新建工程 3、加载源文件 4、选择器件 5、仿真器配置 6、工程信息 二、配置工程 7、设置顶层文件 8、配置…

【多线程】初识线程,基础了解

目录 认识线程 概念 什么是线程&#xff1f; 为啥要有线程 进程和线程的区别 Java 的线程 和 操作系统线程 的关系 创建线程 1.继承 Thread 类 2.实现 Runnable 接口 3.通过匿名内部类方式创建Thread与实现Runnable 4.Lmabda表达式 Thread 类及常见方法 Thread 的常见构造方法…

点评项目最后一篇:基于HyperLogLog实现UV统计

文章目录 1 HyperLogLog2 测试百万数据的统计 1 HyperLogLog 首先我们搞懂两个概念&#xff1a; UV&#xff1a;全称Unique Visitor&#xff0c;也叫独立访客量&#xff0c;是指通过互联网访问、浏览这个网页的自然人。1天内同一个用户多次访问该网站&#xff0c;只记录1次。…

无线键盘有几种连接方式?(USB接收器连接(无线2.4g)、蓝牙连接、wi-fi连接、红外线连接)

文章目录 无线键盘有哪几种连接方式&#xff1f;各连接方式优缺点 无线键盘有哪几种连接方式&#xff1f; 无线键盘有以下几种连接方式&#xff1a; 通过USB接收器连接&#xff08;无线2.4g&#xff09;&#xff1a;无线键盘通过USB接收器与电脑连接&#xff0c;一般需要插入电…

3W字吃透:微服务 sentinel 限流 底层原理和实操

40岁老架构师尼恩的掏心窝&#xff1a; 现在拿到offer超级难&#xff0c;甚至连面试电话&#xff0c;一个都搞不到。 尼恩的技术社群中&#xff08;50&#xff09;&#xff0c;很多小伙伴凭借 “左手云原生 右手大数据 SpringCloud Alibaba 微服务“三大绝活&#xff0c;拿…

MySQL 数据库 增删查改、克隆、外键 等操作

数据库中有数据表&#xff0c;数据表中有一条一条的记录。 可以用Navicat 等远程连接工具链接数据库&#xff0c;不过数据库需要开启授权。 SQL 字段数据类型 int&#xff1a;整型&#xff0c;默认长度是11 float&#xff1a;单精度浮点&#xff0c;4字节32位 double&#x…

Kyligence Zen产品体验-让大数据分析更轻松

很高兴有机会为大家分享我对 Kyligence Zen 产品的真实体验。在过去的几周中&#xff0c;我花费了大量时间使用这个企业级指标平台&#xff0c;并发现它在帮助企业处理和分析海量数据方面拥有强大的能力。 作为数据分析师&#xff0c;我们经常需要处理和分析大量的数据。这可能…

K8S管理系统项目实战[前端开发]-1

前端 Vue 入门与进阶 Vue ElementPlus 组件库 K8s管理系统项目实战[前端开发]-1 项目概述、框架搭建 Vue前端开发&#xff1a;整体布局 Vue前端开发&#xff1a;工作流 Vue前端开发&#xff1a;登录登出、部署、总结 一、项目慨述 本节是k8s管理系统项目实战的前端开发…

Endnote引用中文、英文参考文献方法(不用手敲中文文献信息)

目录 引用英文参考文献 插入中文参考文献格式 导入出错的解决方案 引用英文参考文献 打开知网的官网&#xff0c;选择想要导出成endnote格式的文献&#xff08;在文献前面打√&#xff0c;即为选中状态&#xff09;&#xff0c;在导出与分析-导出文献-endnote&#xff0c;即…

配置Visual Studio Code连接远程服务器

目录 一、Windows用户需要先配置好本地的Remote SSH相关服务 二、打开VS Code&#xff0c;在扩展中搜索"Remote - SSH"并安装​编辑 三、详细操作 四、在出现的config配置文件中写入以下信息 五、点击VSCode界面最左侧的远程资源管理器 六、输入密码&#xff0…

记录一个特殊场景下,修改代码,idea 需要 mvn clean install的问题

修改java代码&#xff0c;mvn clean install 才能生效的场景&#xff0c;在网上看到一些方法&#xff0c;但是都没有生效。eg: 删除.idea&#xff0c; 删除后重新导入。每次修改代码测试的时候都要手动 clean install才可以&#xff0c;比较麻烦。 跑代码的时候&#xff0c;自…

HALCON多线程框架

1.整体架构 HALCON多线程处理框架基本思想是单独一个线程获取待处理图像&#xff0c;若干个图像处理线程并行执行 2.架构图 3.HALCON多线程并行相关算子 broadcast_condition clear_barrier clear_condition clear_event clear_message clear_message_queue clear_mutex cre…

Mac 安装 Python3.10 和 配置环境

Mac 安装 Python3.10 并且配置环境 一、Python的安装 访问官网&#xff1a;https://www.python.org/选择系统&#xff08;Mac&#xff09;: [https://www.python.org/downloads/macos/] 3.选择一个版本下载。我这里选择了3.10.X 下载页面&#xff1a;https://www.python.or…