分享一个比JDK的ThreadPoolExecutor更好用的线程池-JohanThreadPool

jtp-JohanThreadPool新版 JohanThreadPool最早起源于jdk-1.4时代,当时如果有完善的ThreadPoolExecutor,或许JohanThreadPool就不会诞生了:) 不过经过多年对JohanThreadPool的小修小改,经过各种使用场合的锤炼,发现不论是开发,还是性能上都明显优于ThreadPoolExecutor。 具体用法不解释,请看demo:johan.util.thread.pool.PoolTest 代码GitHub中,请稍后...(csdn上的有bug,非常sorry) 这里简单比较一下JohanThreadPool和ThreadPoolExecutor异同,简单说一下为什 立即下载

JohanThreadPool最早起源于jdk-1.4时代,当时如果有完善的ThreadPoolExecutor,或许JohanThreadPool就不会诞生了:)

不过经过多年对JohanThreadPool的小修小改,经过各种使用场合的锤炼,发现不论是开发,还是性能上都明显优于ThreadPoolExecutor。

具体用法不解释,请看demo:johan.util.thread.pool.PoolTest

代码下载:http://download.youkuaiyun.com/detail/everlastinging/7666661

这里简单比较一下JohanThreadPool和ThreadPoolExecutor异同,简单说一下为什么好用(也欢迎大家提出异议,帮助改进JohanThreadPool)

1、代码更加抽象

将Job和Runnable分离。ThreadPoolExecutor大的缺点是,你每次执行一个任务,都得生成一个Runnable,处理逻辑必须写死在里面的run方法上,待执行的Job与之关联的不优雅。

JohanThreadPool是个模板类,你可以定义一个Job的class,作为待处理任务;实现处理逻辑只要重写其doJob(T t)方法即可。

2、合并coreSize和minSize

在JohanThreadPool,coreSize和minSize是同一个东西;而且去掉了lazy模式,初始化时即生成minSize个worker。

3、去掉了维护线程池的各种没必要的东东

例如好多状态变量什么的。

尽管JohanThreadPool封装上比ThreadPoolExecutor更加复杂,但是核心数据结构简单很多,运行机制也非常简洁;简单总是没错的,而且测试也说明了问题,性能上优于ThreadPoolExecutor。

别再只调API了!深度拆解Dify文件上传的两种传参方式(sys.file vs. inputs.upload_file) 本文深度解析Dify平台文件上传的两种传参方式——sys.file与inputs.upload_file,详细对比其设计原理、技术实现及适用场景。通过代码示例和性能分析,帮助开发者在本地大模型应用中做出精准技术选型,提升文件处理效率与系统稳定性。 阅读详情

相关推荐

海康威视4G摄像头直连实战:不用萤石云,手把手教你用ISUP SDK搞定跨网段视频流

本文详细介绍了如何通过海康威视ISUP SDK实现4G摄像头的直连通信,提供了一套零平台费、自主可控的技术方案。文章涵盖技术选型、设备端配置、服务器端开发及高级应用场景,特别适合中小型安防项目,帮助开发者解决跨网段视频流传输难题,降低长期运营成本。

weixin_27076351的博客 470

并发编程19-ThreadPoolExecutor(线程池)和Executors框架

文章目录1. 线程池概述2. 创建一个线程池并提交线程任务3. 线程池源码解析3.1 参数认识3.2 构造方法3.3 内部类Worker3.4 提交任务3.4.1 addWorker3.5 执行任务3.6 关闭线程池4. Executors4.1 newCachedThreadPool4.2 newFixedThreadPool4.3 newScheduledThreadPool4.4 new...

bobshute的专栏 326

BUCK降压斩波电路设计实战:从IGBT选型到续流二极管优化

本文详细解析了BUCK降压斩波电路的设计实战,从IGBT选型到续流二极管优化,涵盖了关键参数设计、调试技巧及电磁兼容问题解决方案。通过实际案例和数据对比,帮助工程师高效完成DC-DC转换电路设计,提升系统性能和可靠性。

weixin_29253711的博客 95

如何优雅的使用和理解线程池

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33778778的博客 422

DELL服务器BIOS下配置RAID阵列

dell服务器配置raid阵列

weixin_58250887的博客 1万+

学习笔记--在线强化学习、离线强化学习、连续强化学习的区别(4)

在连续强化学习中,状态和动作都是连续的,这意味着智能体可以采取无限数量的动作,并且状态空间是连续的,而不是离散的点。- 策略评估和模型选择:在离线学习中,如何有效地评估不同策略和模型的性能,是一个重要的研究问题。- 连续学习和迁移学习:在线学习中,学习者需要不断在不同任务和环境中学习,研究者致力于研究如何将之前学到的知识迁移到新任务中,以实现更高效的学习和决策。- 连续动作选择和优化:在连续动作空间中,智能体对动作的选择是无限的,研究者在连续强化学习中通常关注如何有效地选择连续动作,以达到最优决策策略。

hzlalb的博客 3601

Executor & ThreadPoolExecutor 线程池详解

在 Java 中,如果每个请求到达就创建一个新线程,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。如果在一个 Jvm 里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。 为了解决这个问题,就有了线程池的概念,线程池的核心逻辑是提前创建好若干个线程放在一个容器中。如果有任务需要处理,则将任务直接分配给线程池中的线程来执行就行,任务处理完以后这个线程不会被销毁,而是等待后续分配任务。同时通过线程池来重复管理线程还可以避免创

leimeng123的博客 4482

arXiv订阅进阶玩法:除了邮件,还能用RSS和Python脚本打造你的专属论文追踪器

本文介绍了arXiv订阅的进阶玩法,教你如何通过RSS和Python脚本打造个性化的论文追踪器。突破传统邮件订阅的局限,实现实时更新、精准过滤和自动化管理,提升科研效率。特别适合需要高效追踪最新研究进展的学者和开发者。

weixin_26757925的博客 627

源码分析:线程池ThreadPoolExecutor与Executors

先介绍单线程怎么实现,然后有什么问题介绍简单线程池实现,然后说不推荐使用这种方式引出Executors,有五种方式,介绍常用四种方式

CrankZ的博客 716

OpenCV实战之人脸美颜美型(八)——大眼(上)

从大众审美的角度来看,眼睛适当的“变大”会让人显得更加年轻。因此美型中就有一项大眼功能,其效果就是让眼睛适当变大,这章内容就围绕着大眼算法展开。

On my way 1211

OpenCV实战(1)——OpenCV与图像处理基础

OpenCV 是一个跨平台计算机视觉和机器学习库,实现了图像处理和计算机视觉方面的很多通用算法。本节将介绍 OpenCV 的基础知识,以及如何编译运行 OpenCV 程序,并介绍如何完成最基本的图像处理任务——读取、显示和保存图像。除此之外,鼠标事件和图形绘制也是 OpenCV 计算机视觉项目中常用的基本功能,本节介绍了如何使用这两个重要的 OpenCV 功能。

盼小辉丶的博客 12万+

java常用的几种线程池比较

诸如 Web 服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务。请求以某种方式到达服务器,这种方式可能是通过网络协议(例如 HTTP、FTP 或 POP)、通过 JMS 队列或者可能通过轮询数据库。不管请求如何到达,服务器应用程序中经常出现的情况是:单个任务处理的时间很短而请求的数目却是巨大的。构建服务器应用程序的一个简单模型是:每当一个请求到达就创建一个新线程,然后在新线程中为请求服务。实际上对于原型开发这种方法工作得很好,但如果试图部署以这种

zhijingzhi的博客 1412

【Bug已解决】npm install -g @anthropic-ai/claude-code 出现 EACCES: permission denied 解决方案

方案适用场景推荐指数nvm 管理 Node长期开发环境,一次配置永久生效⭐⭐⭐⭐⭐修改 npm 全局目录不想引入 nvm,快速解决⭐⭐⭐⭐修复现有目录权限之前用过 sudo 装包,需要修复⭐⭐⭐Windows 管理员/改目录Windows 平台专用⭐⭐⭐⭐官方原生安装脚本想彻底避开 npm 权限问题⭐⭐⭐⭐报的本质是npm 全局安装目录的属主权限与当前执行用户不匹配,而不是 npm 或 Claude Code 本身有问题。不要用sudo"强行"解决。

一键难忘的博客 1万+

多线程使用建议(最好用线程池)

  在作为多线程编程中一般会用线程池去开启一个多线程:(单独开启也可)    <!-- 定时任务 --> <bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"> <property name="corePoolSize...

yuhui666666的博客 716

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

SpringMVC引入QUARTZ定时器原理分析学习

整体流程: 系统初始化时,加载quartz.properties配置文件,获取定时器相关配置,包括定时器相关表前缀,jobstore实现类等配置;系统启动完成后,将数据库配置的定时器信息以bean的形式注册,然后使用监听器监听Job、Trigger等。(红色字体部分暂时不是完全理解); 定时器初始化完成以后,具体定时器通过调用job接口的execute方法实现业务逻辑的定时处理; quart...

以考促学,持证上岗。 607

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

ThreadPoolExecutor

作用: 大量异步任务的场景下,可以提升性能,避免了每个任务都要分配一个线程带来的资源消耗。 提供管理资源的能力,包括统计当前的线程使用情况,任务的各种状态统计(已完成的任务数量、已提交的任务数量、排队的任务数量等) 参数: corePoolSize:池中固定的线程数量,当然也和创建时的策略有关,取决于是prestartCoreThread还是prestartAllCoreThreads,是一...

总结、分享、交流 382

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

ThreadPoolExecutor使用和思考(上)-线程池大小设置与BlockingQueue的三种实现区别

工作中多处接触到了ThreadPoolExecutor。趁着现在还算空,学习总结一下。   前记:   jdk官方文档(javadoc)是学习的最好,最权威的参考。 文章分上中下。上篇中主要介绍ThreadPoolExecutor接受任务相关的两方面入参的意义和区别,池大小参数corePoolSize和maximumPoolSize,BlockingQueue选型(Synchronou...

洞玄的博客 2010

Executors和ThreadPoolExecutor那种方式创建线程池更好

Executors和ThreadPoolExecutor那种方式创建线程池更好问题来源意外发现使用ThreadPoolExecutor 创建线程池池 问题来源 在一次使用阿里代码规约扫描历史项目时发现错误提示,提示内容如下图所示,我摘抄出部分关键信息供大家阅读。 线程池不应使用Executors去创建,而是通过ThreadPoolExecutor的方式。这样的处理方式让写的同学更加明确线程池的运行...

凌飞安 1475

比ThreadPool对象更好用的线程控制对象

Task对象很多人知道了(使用Task代替ThreadPool和Thread, C#线程篇—Task(任务)和线程池不得不说的秘密(5))相对的还有TaskScheduler 这个调度器,可以自定义调度器,只要重写TaskScheduler 方法就可以了 微软原来一早就对他进行了扩展Samples for Parallel Programming with the .NET Framework转

lee576的专栏 3833

Java ThreadPoolExecutor线程池学习笔记(使用、原理、常见问题总结)-这一篇就够了

简介 线程池的由来: 线程资源十分有限,开启线程需要系统开销,所以我们可以换成一定数量的线程,然后取管理和复用这些线程,统一分配和控制线程的最大并发数,提供拒绝机制。 优点 降低创建、销毁线程的开销(重用线程池的线程) 有效控制线程池的最大并发数,避免大量的线程之间因互相抢占系统资源而导致阻塞现象; 提高线程响应速度 提高对线程的管理,提供定时/循环间隔执行等功能 工作原理 实际上通过 T...

王智博 1439

线程池研发学习笔记

可以直接叙述,也可以对比连接池介绍```线程池其实就是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后在创建线程后自动启动这些任务。这里的线程就是我们前面学过的线程,这里的任务就是我们前面学过的实现了Runnable或Callable接口的实例对象;```1:网购商品秒杀多人同时抢购某件商品,只有部分人会成功,其他人失败;2:云盘文件上传和下载同时可以上传多个文件或下载多个文件,且有最大上传和下载文件的个数限制;3:12306网上购票系统等。

liuhm的博客 2022

线程池基础类_ThreadPoolExecutor (JDK1.8)

ThreadPoolExecutor简介  ThreadPoolExecutor使用线程池执行提交的任务,还维护一些基本统计信息,例如已完成任务的数量。   为了适应大多数场景,该方法提供了许多可调参数和钩子方法。但是推荐使用 Executors工厂方法构造实例:Executors.newCachedThreadPool(无限制线程池,具有自动线程回收),Executors.newFixedTh

技术流水 2544

Java线程池详解:ThreadPoolExecutor、Executors

在操作系统中,线程是一个非常重要的资源,频繁创建和销毁大量线程会大大降低系统性能。Java线程池原理类似于数据库连接池,目的就是帮助我们实现线程复用,减少频繁创建和销毁线程。ThreadPoolExecutorThreadPoolExecutor是线程池的核心类。首先看一下如何创建一个ThreadPoolExecutor。下面是ThreadPoolExecutor常用的一个构造方法:ThreadPo

叉叉哥的BLOG 1万+

Spring线程池和JDK线程池的区别及与FutureTask配合使用得到任务执行结果

API  文档中很清楚,SpringFrameWork 的 ThreadPoolTaskExecutor 是辅助 JDK 的 ThreadPoolExecutor  的工具类,它将属性通过 JavaBeans 的命名规则提供出来,方便进行配置。 1.JDK之ThreadPoolExecutor的使用  Spring中的ThreadPoolTaskExecutor是借助于JDK并发包中的java

零度的博客专栏 9512

四种常用线程池

一、newCachedThreadPool public static ExecutorService newCachedThreadPool() { return new ThreadPoolExecutor(0, Integer.MAX_VALUE, 60L, TimeUnit.SECONDS, new SynchronousQueue

lhd992692552的博客 5108
上一篇: MarioTCP:一个可单机支持千万并发连接的TCP服务器
下一篇: 人形机器人的当下和未来
moptimus
博客等级 码龄20年 49粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值