线程池原理分析

article/2025/10/7 9:35:25

使用线程池目的

在开发过程中,合理地使用线程池能够带来3个好处。
1.降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
2.提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
3.提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。但是,要做到合理利用

线程池作用

线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作服务,减少了创建和销毁线程所需的时间,从而提高效率。
如果一个线程的时间非常长,就没必要用线程池了(不是不能作长时间操作,而是不宜。),况且我们还不能控制线程池中线程的开始、挂起、和中止。

线程池四种创建方式

newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。


newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。


newScheduledThreadPool 创建一个定时线程池,支持定时及周期性任务执行。


newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。

 

线程池的分类

Java是天生就支持并发的语言,支持并发意味着多线程,线程的频繁创建在高并发及大数据量是非常消耗资源的,因为java提供了线程池。在jdk1.5以前的版本中,线程池的使用是及其简陋的,但是在JDK1.5后,有了很大的改善。JDK1.5之后加入了java.util.concurrent包,java.util.concurrent包的加入给予开发人员开发并发程序以及解决并发问题很大的帮助。这篇文章主要介绍下并发包下的Executor接口,Executor接口虽然作为一个非常旧的接口(JDK1.5 2004年发布),但是很多程序员对于其中的一些原理还是不熟悉,因此写这篇文章来介绍下Executor接口,同时巩固下自己的知识。如果文章中有出现错误,欢迎大家指出。
Executor框架的最顶层实现是ThreadPoolExecutor类,Executors工厂类中提供的newScheduledThreadPool、newFixedThreadPool、newCachedThreadPool方法其实也只是ThreadPoolExecutor的构造函数参数不同而已。通过传入不同的参数,就可以构造出适用于不同应用场景下的线程池,那么它的底层原理是怎样实现的呢,这篇就来介绍下ThreadPoolExecutor线程池的运行过程。

ThreadPoolExecutor核心方法
corePoolSize:核心线程数 当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中
maximumPoolSize:线程池最大线程数,它表示在线程池中最多能创建多少个线程;
keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止。
unit:参数keepAliveTime的时间单位,有7种取值,在TimeUnit类中有7种静态属性                  
BlockingQueue:阻塞队列

线程池原理剖析

提交一个任务到线程池中,线程池的处理流程如下:
1、判断线程池里的核心线程是否都在执行任务,如果不是(核心线程空闲或者还有核心线程没有被创建)则创建一个新的工作线程来执行任务。如果核心线程都在执行任务,则进入下个流程。
2、线程池判断工作队列是否已满,如果工作队列没有满,则将新提交的任务存储在这个工作队列里。如果工作队列满了,则进入下个流程。
3、判断线程池里的线程是否都处于工作状态,如果没有,则创建一个新的工作线程来执行任务。如果已经满了,则交给饱和策略来处理这个任务。

合理配置线程池

要想合理的配置线程池的大小,首先得分析任务的特性,可以从以下几个角度分析:
1.任务的性质:CPU密集型任务、IO密集型任务、混合型任务。
2.任务的优先级:高、中、低。
3.任务的执行时间:长、中、短。
4.任务的依赖性:是否依赖其他系统资源,如数据库连接等

性质不同的任务可以交给不同规模的线程池执行
cup密集  任务需要大量的运算,而没有阻塞,CPU一直全速运行。配置线程数=CPU核数 
IO密集  任务在单线程中产生大量IO阻塞 可以使用多线程解决阻塞 不会浪费等待资源 多线程配置2*CPU核数


http://chatgpt.dhexx.cn/article/lGPo7JKk.shtml

相关文章

Java 线程池原理总结

Java 线程池原理总结 (一)什么是线程池 线程池做的工作主要是控制运行的线程的数量,处理过程中将任务放入队列,然后在线程创建后启动这些任务,如果线程数量超过了最大数量超出数量的线程排队等候,等其它线…

线程池原理总结

【引言】 关于线程池,印象中好像自己有写过相关的总结博客。翻了翻之前的博客,确实,在去年十一月写过一篇《线程池使用总结》。 时隔一年,我已经离开了那家让我成长很多的公司,在那里,写了很多的代码&…

线程池原理全解析

目录 1 线程池简介 2 线程池 2.1 ThreadPoolExecutor类 2.2 ThreadPoolExecutor方法 3 线程池实现原理 3.1.线程池状态 3.2.任务的执行 总结过程 3.3.线程池中的线程初始化 3.4.任务缓存队列及排队策略 3.5.任务拒绝策略 3.6.线程池的关闭 3.7.线程池容量的动态调…

一文带你清晰弄明白线程池的原理

不知道你是否还记得阿里巴巴的java代码规范中对多线程有这样一条强制规范: 【强制】线程资源必须通过线程池提供,不允许在程序中显示创建线程。 说明:使用线程池的好处是减少在创建和销毁线程池上所消耗的时间以及系统资源的开销,解决资源不足…

线程池工作原理

一、线程池默认工作流程 1、线程在有任务的时候会创建核心的线程数corePoolSize 2、当线程满了(有任务但是线程被使用完)不会立即扩容,而是放到阻塞队列中,当阻塞队列满了之后才会继续创建线程。 3、如果队列满了,线程数达到最大线程数则会执行拒绝策…

线程池的工作原理

线程池,就是存放线程的池子,池子里存放了很多可以复用的线程 作用: 1.对线程进行统一管理 2.降低系统资源消耗。通过复用已存在的线程,降低线程创建和销毁造成的消耗 3.提高响应速度。当有任务到达时,无需等待新线…

线程池核心原理分析

一、基础概念 线程池是一种多线程开发的处理方式,线程池可以方便得对线程进行创建,执行、销毁和管理等操作。主要用来解决需要异步或并发执行任务的程序 谈谈池化技术 简单点来说,就是预先保存好大量的资源,这些是可复用的资源,你需要的时候给你。对于…

线程池原理(讲的非常棒)

Java并发编程:线程池的使用 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了&…

服务器常见的网络攻击以及防御方法

网络安全威胁类别 网络内部的威胁,网络的滥用,没有安全意识的员工,黑客,骇客。 木马攻击原理 C/S 架构,服务器端被植入目标主机,服务器端通过反弹连接和客户端连接。从而客户端对其进行控制。 病毒 一…

传奇服务器容易受到什么攻击,怎么防御攻击?

有兄弟问明杰,说自己打算开服,听说攻击挺多的,就是想先了解一下开传奇用的服务器最容易受到什么类型的攻击,如果遇到了又改怎么防御呢?带着这个问题,明杰跟大家详细的说一下,常见的开区时候遇到…

传奇服务器常见的网络攻击方式有哪些?-版本被攻击

常见的网络攻击方式有哪些?常见的网络攻击方式 :端口扫描,安全漏洞攻击,口令入侵,木马程序,电子邮件攻击,Dos攻击。 1.传奇服务器端口扫描: 通过端口扫描可以知道被扫描计算机开放了…

服务器被ddos攻击的处置策略

如果您的服务器遭到了DDoS攻击,以下是一些可以采取的措施: 使用防火墙和安全组进行限制:限制服务器的流量以防止进一步的攻击。 升级服务器资源:为了应对更高的流量,可以升级服务器的内存,处理器等资源。 安…

如何从根本上防止服务器被攻击

随着互联网的发展,服务器成为了企业和个人网络应用的重要基础设施。但是,随之而来的网络安全威胁也在不断增加,服务器安全问题也成为了影响企业信息安全的重要因素。针对这种情况,服务器安全防御变得尤为重要。   服务器安全防御…

来一起学怎么攻击服务器吧!!!

我们上线了两门新课。 一门教你漏洞的原理和攻击代码怎么写。 一门会教你木马的制作。 一如既往地,新课刚上线都是限时优惠状态,感兴趣的同学用力点击下面这两个妹子吧: Kali 渗透测试 - 服务器攻击实战 Kali 渗透测试 - 后门技术实战 提示&a…

网站服务器怎么做防御?遇到攻击如何解决?

每个网站都可能遇到网络攻击,这是正常现象。攻击可能来自密码错误、防火墙配置错误、病毒软件、空闲端口等。大量的网络攻击在竞争激烈的行业或企业中更为常见。 目前需要有一套完整的安全策略来保护流浪数据,防止网站服务器被攻击。完善可靠的安全策略…

服务器被攻击怎么办?常见处理方法

对于企业用户来,最害怕的莫过于服务器遭受攻击了,比如被大量登录、网页被篡改、数据库被非法登录、网络日志异常等,尽管运维人员在此之前做好了全面的防范工作,但攻击再所难免,如何在服务器遭受攻击后能够迅速有效的处…

服务器被DDoS攻击,怎么破?

文章目录 前言网站受到DDoS的症状判断是否被攻击查看网络带宽占用查看网络连接TCP连接攻击SYN洪水攻击 防御措施TCP/IP内核参数优化iptables 防火墙预防防止同步包洪水(Sync Flood)Ping洪水攻击(Ping of Death)控制单个IP的最大并…

黑客攻击入侵服务器的6种常见方式

服务器被入侵既有一定的偶然性,也有一定的必然性,网络上有两种黑客,一种是漫无目的的漫天撒网形式的黑客,一种是目标明确只入侵指定目标的黑客,我们称前一种黑客叫菜鸟黑客,称后一种黑客叫高级黑客。简单的…

web服务器攻击的八种方式

随着互联网的高速发展,网络走进了千家万户,同时也有很大一部分人架设起了自己的网站。继而不安分的黑客们,又将目光对准了服务器攻击这个方式,从而破坏或取得服务器的管理权限。本文将主要讲述针对web服务器攻击的八种方式。 1、…

Webpack--模块热替换(HMR)

一、概述 (1)live reload 只要检测到代码改动就会自动重新构建,然后触发网页刷新 (2)webapack中的模块热替换 可以让代码在页面不刷新的前提下得到最新的改动,甚至不需要重新发起请求就能看到更新后的效…