JAVA线程池的使用

news/2024/12/22 14:31:00/

一、池化思想和JAVA线程池

池化是很重要的思想;池化的好处是提供缓冲和统一的管理。这个笔者在本人的数据库连接池的博客中已经提到过了(JAVA常用数据库连接池_王者之路001的博客-CSDN博客

)。

线程池是另一种池化思想的运用,把线程放入池中进行管理。这种方法的好处是可以避免线程的创建、切换和销毁,因为这些过程非常耗资源。

JAVA线程池就是这样的一种线程池。

二、JAVA线程池基本原理

JAVA线程池的基本原理,其实就是对线程的生产者-消费者模型。线程池对产生的任务进行序贯执行。

JAVA线程池主要做的事情是对线程池的管理和任务的执行。

 如上图所示,右半部分是线程池的管理,而左半部分是任务的执行。

任务执行通过阻塞队列来完成。

线程池执行任务如下图所示:

JAVA线程池会确定核心线程数和最大线程数,来控制线程池的大小。

三、JAVA线程池的使用

JAVA线程池主要有newCachedThreadPool、newFixedThreadPool、newSingleThreadExecutor和newScheduledThreadPool。

一般通过父类ExecutorService声明使用。代码样例如下:

public class FixedThreadPool {public static void main(String[] args) {ExecutorService executorService = Executors.newFixedThreadPool(10);for (int i = 0; i < 200; i++) {executorService.execute(new Task());}executorService.shutdown();}
}

其中,Task为相关线程。也可以采用匿名函数等方式运行。

四、避免的问题

一般情况下,大厂都不建议工程师自己创建线程池,因为线程池创建很容易消耗大量内存。大厂一般有自己的线程池创建模型。

参考文献

[1]Java线程池实现原理及其在美团业务中的实践 - 美团技术团队

[2]面试必问:Java 线程池 | Java程序员进阶之路

[3]JUC线程池: ThreadPoolExecutor详解 | Java 全栈知识体系

[4]https://www.cnblogs.com/vipstone/p/14149065.html

[5]彻底搞懂Java线程池的工作原理-51CTO.COM

[6]https://www.cnblogs.com/pcheng/p/13540619.html


http://www.ppmy.cn/news/25737.html

相关文章

小菜版考试系统——“C”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是小菜版考试系统&#xff0c;最近一直在忙C语言课程设计的事&#xff0c;那么&#xff0c;就请uu们看看我的学习成果吧。 课程设计任务 摘要 题目分析 流程图 关键程序代码 程序运行结果 结论与心得 参…

2023年美赛赛题思路分析

2023年的赛题A-F题的整体难度不算太难&#xff0c;难度在于数据的收集上。整体难度上来看&#xff0c;难度上F题难度最小&#xff0c;建议直接上手。本次先给大家分享一些数据网站&#xff0c;在对各题做简单的思路分析。1、美国国家海洋和大气管理局Homepage | National Ocean…

makefile简易教程

makefile简易教程 一、学习目标 达到多文件快速编译的需求&#xff0c;相关符号的意思&#xff0c;以及其它注意事项。 二、快速入门 2.1 基本概念 Makefile 是一个在Unix和Linux操作系统上使用的构建工具&#xff0c;用于自动化编译和构建源代码。 2.2 用处 通过Makefi…

Centos7 调整磁盘空间

1. 查看磁盘空间占用情况&#xff1a; df -h 可以看到 /home 有很多剩余空间,占了绝大部分&#xff0c; 而我又很少把文件放在home下。 2. 备份 /home 下的内容&#xff1a; cp -r /home/ /homebak/ 3. 关闭home进程&#xff1a; fuser -m -v -i -k /home 报错: -bash: fuser…

Java中多继承的实现

1 问题Java是一种面向对象的只允许单继承的语言&#xff0c;那么怎样在Java中实现多继承呢&#xff1f;2 方法多层继承如果要直接继承类&#xff0c;子类是不可以直接多继承的&#xff0c;但是可以通过多层继承来实现多继承&#xff0c;但多层继承一般不建议超过三次。接口接口…

【python百炼成魔】python之列表详解

文章目录一. 列表的概念1.1 列表是什么&#xff1f;1.2 为什么要使用列表&#xff1f;1.3 列表的定义二. 列表的增删改查操作2.1 列表的读取2.2 列表的切片2.3 列表的查询操作2.3.1 not in ,in 表达式2.3.2 列表元素遍历2.4 列表元素的增加操作2.4.1 append()的相关用法2.4.2 e…

【Azure 架构师学习笔记】-Azure Logic Apps(7)- 自定义Logic Apps 调度

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Logic Apps】系列。 接上文【Azure 架构师学习笔记】-Azure Logic Apps&#xff08;6&#xff09;- Logic Apps调用ADF 前言 在稍微了解Logic Apps的使用之后&#xff0c;需要开始考虑如何调度起来。在Logic Apps里面…

2023美国大学生数学建模竞赛(美赛)思路代码

2023美国大学生数学建模竞赛&#xff08;美赛&#xff09;思路&代码报名时间节点比赛说明问题A&#xff08;数据分析题&#xff09;&#xff1a;收干旱影响的植物群落&#xff08;MCM&#xff09;第一问第二问问题B&#xff08;仿真建模题&#xff09;&#xff1a;重塑马赛…