JAVA多线程实现-可控最大并发数线程池(newFixedThreadPool)

Java线程池 一.简介 线程池(Thread Pool)是一种基于池化思想的管理线程的工具,经常出现在多线程服务器中,如MySQL。 线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。 优势 降低资源消耗:通过池化技术重复利用已创建的线程,降低线程创建和销毁造成的损耗。 提高响应速度:任 阅读详情

上篇文章中介绍了单线程化线程池newSingleThreadExecutor,可控最大并发数线程池(newFixedThreadPool)与其最大的区别是可以通知执行多个线程,可以简单的将newSingleThreadExecutor理解为newFixedThreadPool(1)。例如运行一下两个程序:

单线程化线程池(newSingleThreadExecutor)示例:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolByNewSingleThreadExecutor {

	public static void main(String[] args) {
		/**
		 * 单线程化的线程池
		 */
		ExecutorService singleThreadExecutor = Executors.newSingleThreadExecutor();
		for (int i = 0; i < 10; i++) {
			final int index = i;
			singleThreadExecutor.execute(new Runnable() {
				@Override
				public void run() {
					Thread.currentThread().setName("Thread i = " + index);
					System.out.println(Thread.currentThread().getName() + " index = " + index);
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {
						System.out.println("exception");
					}
				}
			});
		}
		singleThreadExecutor.shutdown();
		System.out.println("on the main thread...");
		
	}

}

可控最大并发数线程池(newFixedThreadPool)示例:

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ThreadPoolByNewFixedThreadPool {
	public static void main(String[] args) {
		
		ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(3);
		for (int i = 0; i < 10; i++) {
			final int index = i;
			newFixedThreadPool.execute(new Runnable() {
				@Override
				public void run() {
					Thread.currentThread().setName("Thread i = " + index);
					System.out.println(Thread.currentThread().getName() + " index = " + index);
					try {
						Thread.sleep(500);
					} catch (InterruptedException e) {
						System.out.println("exception");
					}
				}
			});
		}
		newFixedThreadPool.shutdown();
		System.out.println("on the main thread...");
	}

}


结果从显示上看虽然很相似,但是观察到的执行效果确实完全不一致的,newSingleThreadPool中,只有一个线程,每次输出一行后暂停0.5秒,newFixedThreadPool(3)中可以创建3个线程,一次输出3行后暂停0.5秒(当然是这三个线程都暂停0.5秒)。

动画对比如下所示:

单线程化线程池

可控最大并发数线程池

多线程之线程池技术实现原理,这篇就够了(十一) 在Java语言中,有两种比较常见的创建线程的方法,一种是继承Thread类,一种是实现Runnable的接口,Thread类其实也是实现了Runnable接口。并且在前面的博文中我们也介绍了有返回结果的创建线程的方式。 这篇博文我们就重点介绍线程池,内容如下: 文章目录为什么使用线程池?线程池如何使用?架构说明线程池有几种实现参数对比应用场景对比ThreadPoolExecutor线程池的七大重要... 阅读详情

相关推荐

【RL in VLA】VLA中的强化学习

本文提出了一种名为 Reinforcement Learning Distilled Generalist(RLDG) 的方法,通过强化学习生成高质量训练数据来微调机器人基础模型。通过在多个精确操作任务上的实验,我们证明了 RLDG 在成功率和泛化能力上显著优于使用人类演示的传统微调方法。RLDG 不仅减少了对人类演示数据的依赖,还展示了在复杂多阶段任务中的灵活性和有效性。

三木今天学习了嘛の博客 2257

Java多线程读取本地照片为二进制流,并根据系统核数动态确定线程数

Java多线程读取图片内容并返回1. ExecutorService线程池2. 效率截图3. 源码 1. ExecutorService线程池 ExecutorService线程池,并可根据系统核数动态确定线程池最大数; // 最大、最小线程数一致,均为系统核数*10+1;链表阻塞对列最多提交200个任务,这个值的设置很关键 private static int workerNum = Runtime.getRuntime().availableProcessors() * 10 + 1; pr

qq_40985985的博客 652

Triton推理服务器实战:如何为PaddleOCR的ONNX模型配置动态批处理和并发推理

本文详细介绍了如何使用Triton推理服务器为PaddleOCR的ONNX模型配置动态批处理和并发推理,以提升GPU利用率和推理性能。通过实战案例和参数调优指南,帮助开发者解决高并发场景下的性能瓶颈问题,实现从实验室到生产环境的高效部署。

weixin_42527160的博客 427

固定数量线程池(newFixedThreadPool)

固定数量线程池(newFixedThreadPool) package com.zhw.learning.thread; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executo...

hello world 4187

在 Windows 上使用 Anaconda 创建 配置 YOLOv8虚拟环境,并更改 pip 源以及以 可编辑模式 安装ultralytics

前往 NVIDIA cuDNN 下载页面,下载与您安装的 CUDA 版本匹配的 cuDNN 版本。:根据您的系统和 CUDA 版本,选择适当的 whl 文件。如下12.7,表示最高可装12.7版本CUDA,与上图中的支持的最高cuda版本一致。,无需重新安装,从而大幅提升开发效率,适用于项目开发、调试或依赖本地未发布的版本时使用,但需确保当前目录包含。:访问 NVIDIA 官方网站,下载与您的显卡和操作系统兼容的 CUDA 版本。首先,确保NVIDIA 显卡支持 CUDA,并安装相应版本的驱动程序。

weixin_44115575的博客 1893

antiSMASH安装与使用

antiSMASH本地安装 简要: antiSMASH的本地安装需要安装很多的依赖包,本文章使用conda辅助安装 参考: 官方:https://docs.antismash.secondarymetabolites.org/install/ 文章:http://blog.sciencenet.cn/blog-3416913-1240614.html 依赖包下载 conda install -y diamond=0.8.36 conda install -y fasttree=2.1.9 conda ins

Curry_chenhu的博客 7225

JAVA中线程池的定义及使用

线程是操作系统进行时序调度的基本单元。 线程池可以理解为一个存在线程的池子,就是一个容器,这个容器只能存在线程。这个容器有大小,可以放7,8个,也可以放3,4个

蜗牛的专栏 1771

从共现矩阵到共现图一步到位——详解版

1.共现矩阵 判断大量不同文本之间,相邻词的联系,两词在所有文本中相邻的次数在矩阵中用数值表示。(参考此) 例子如下: 1.1 文本 • I like deep learning. • I like NLP. • I enjoy flying. 1.2 共现矩阵 2.共现图 2.1 数据预处理(节点和边) 获取文件node.csv和edge.csv。代码详见github仓库 2.2 共现图的制作 2.2.1 gephi的安装(参考此) (1)先下载gephi (2) 再配置java环境(下载java1.8

微乐的博客 4403

Java中多线程的使用(三):线程池示例

线程池基本概念 Java中可以使用 ExecutorService(接口)实现线程池 ExecutorService存在若干个实现类 使用线程池进行多线程下载示例 在介绍例子之前,需要指出为什么我们要用多线程下载,多个线程下载还要有额外的线程切换消耗,不是更慢吗? 实际上如果单个线程能够达到最大下载速度,限制下载速度的是带宽的话,单线程要比多线程快; 但是,如果对方服务器的响应不...

jack5s的博客 420

从Low Byte解析DTC故障类型:系统开发中的诊断精细化实践

本文深入解析DTC故障诊断中Low Byte的关键作用,详细介绍了其在系统开发中的精细化应用实践。通过分析Low Byte的编码规则和故障分类设计,帮助开发者优化诊断数据库和解码方案,提升汽车电子系统的故障诊断效率和准确性。

weixin_28312391的博客 264

实战17:GCN+LSTM图卷积神经网络预警预测 完整代码数据集

实战17:GCN+LSTM图卷积神经网络预警预测 完整代码数据集

1947

线程池FixedThreadPool

如何创建 FixedThreadPool 直接 new的话,好像是出不来的 只能通过自动创建来创建一个出来 public class TestFixedThreadPool{ public static void main(String[] args) { ExecutorService threadPool = Executors.newFixedThreadPool(5); } } 参数传进去 5代表了什么意思?我们进去源码看一下 public static Exe

陈九礼 1215

构建AI Agent驱动的智能健康管理系统

数据碎片化:健康数据分散在不同的设备和平台中,难以统一管理和分析。个性化不足:健康管理方案通常是通用的,难以根据个人的健康状况实时调整。用户参与度低:用户难以获得及时、个性化的健康建议,导致健康管理效果不佳。AI Agent是一个能够感知环境、采取行动以实现目标的智能实体。根据智能体的智能水平,可以分为简单反应式智能体和复杂适应式智能体。实时监测健康数据。获取个性化的健康建议。收到健康风险预警。

AI天才研究院 749

(优快云迁移) JAVA多线程实现-可控最大并发数线程池(newFixedThreadPool)

上篇文章中介绍了单线程化线程池newSingleThreadExecutor,可控最大并发数线程池(newFixedThreadPool)与其最大的区别是可以通知执行多个线程,可以简单的将newSingleThreadExecutor理解为newFixedThreadPool(1)。例如运行一下两个程序: 单线程化线程池(newSingleThreadExecutor)示例: impor...

dixu4171的博客 171

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

newFixedThreadPool,可控最大并发数线程池

多线程实现-可控最大并发数线程池(newFixedThreadPool) 最多只会创建设置的线程数量,其他的任务处于等待队列。 测试: package com.itcast.thread; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * @Descri...

Seven71111的博客 2578

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java线程池(详解)

线程池介绍,四种创建线程池的方式,推荐线程池用法,线程池的工作原理,线程池的四种拒绝策略,如何合理分配线程池参数

祁_z 3万+

java线程池

java线程池

y516369的博客 2855

ExecutorService 线程池 newFixedThreadPool newSingleThreadExecutor newCachedThreadPool

import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * 第4种获得使用多线程的方式 线程池 * Executors.newFixedThreadPool(5): * 1 创建一个定长线程池,可控线程最大并发数,超出的线程会在队列种等待。 * 2 newFixedThreadPool创建的线程池的corePoolSize和maximumPoolSize相等,使用LinkedB.

442

Java多线程(六):线程池详解

目录 1. 什么是线程池 2. 为什么要使用线程池 3. 线程池创建 3.1固定数量的线程池(Executors.newFixedThreadPool) 3.1.1 创建固定数量的线程池 3.1.2线程池返回结果 3.1.3 submit() VS execut() 3.2.4 线程工厂 3.2带缓存的线程池(Executors.newCachedThreadPool) 3.3执行定时任务(Executors.newSingleThreadExecutor) 3.3.1 延迟...

澄白易的博客 6139

多线程案例-线程池

多线程案例-线程池

chenchenchencl的博客 1623

Java多线程之线程池

假如,我们去学校打印店里面去打印一个东西的时候,这时,打印店里面的人比较多,此时打印店老板给你说:同学,你是要在门口的自助打印机上自己打印,还是要等着让我给你打印,如果说我们是要自己在门口的自助打印机上自己打印,那么这个打印东西所消耗的时间完全是在我们可控的范围之内的,如果此时我们要是让老板给我们打印,那么打印完我们的东西需要多少时间就不是我们可以控制的了。我们从线程池中拿线程,就是纯用户态的操作,但是在系统中创建线程,就是用户态和内核态之间的切换,真正的创建内核态操作完成的。

qq_63525426的博客 761

【Java | 多线程案例】——初识线程池

【Java 多案例分析】——初识线程池

m0_74352571的博客 1546

Java 线程池知识总结

​ 在程序中经常需要用到多线程处理一些任务,这时候不建议单纯使用Thread或者实现Runnable接口的方式来创建线程,因为创建和销毁线程、和线程的上下文切换是需要耗费资源的,另一方面不加限制的创建线程可能导致系统资源耗尽。所以需要使用多线程的场景建议使用线程池,使用线程池会带来以下好处:创建一个固定大小的线程池,因为采用无界的阻塞队列,所以实际线程数量永远不会变化,适用于负载较重的场景,对当前线程数量进行限制。(保证线程数可控,不会造成线程过多,导致系统负载更为严重) 使用的构造方式为new Threa

zhanlan5211的博客 960

多线程之线程池详解

【代码】多线程之线程池详解。

qq_56444564的博客 446

Java线程池总结

Java线程池总结一、 线程池简介 一、 线程池简介

qq_34851243的博客 593
上一篇: JAVA多线程实现-单线程化线程池newSingleThreadExecutor
下一篇: jFinal无法启动_JFinalDemoGenerator问题解决办法
山禾_Abel
博客等级 码龄15年 30粉丝 34原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值