当前位置: 首页 > news >正文

Java 如何不用再每次新建线程,直接使用公共线程池

前言

Hutool 是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。

官网:https://www.hutool.cn/

推荐说明

并发在Java中算是一个比较难理解和容易出问题的部分,而并发的核心在线程。好在从JDK1.5开始Java提供了concurrent包可以很好的帮我们处理大部分并发、异步等问题。

不过,ExecutorService和Executors等众多概念依旧让我们使用这个包变得比较麻烦,如何才能隐藏这些概念?又如何用一个方法解决问题?ThreadUtil便为此而生。

最佳实践

引入pom


<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><!-- 请查看最新版本 https://mvnrepository.com/artifact/cn.hutool/hutool-all --><version>5.8.26</version>
</dependency>

ThreadUtil.execute

直接在公共线程池中执行线程

ThreadUtil.newExecutor

获得一个新的线程池

ThreadUtil.execAsync

执行异步方法

ThreadUtil.newCompletionService

创建CompletionService,调用其submit方法可以异步执行多个任务,最后调用take方法按照完成的顺序获得其结果。若未完成,则会阻塞。

ThreadUtil.newCountDownLatch

新建一个CountDownLatch,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。

ThreadUtil.sleep

挂起当前线程,是**Thread.sleep**的封装,通过返回boolean值表示是否被打断,而不是抛出异常。
**ThreadUtil.safeSleep****方法是一个保证挂起足够时间的方法,当给定一个挂起时间,使用此方法可以保证挂起的时间大于或等于给定时间,解决
****Thread.sleep**挂起时间不足问题,此方法在Hutool-cron的定时器中使用保证定时任务执行的准确性。

ThreadUtil.getStackTrace

此部分包括两个方法:

  • **getStackTrace** 获得堆栈列表
  • **getStackTraceElement** 获得堆栈项

其它

  • **createThreadLocal** 创建本地线程对象
  • **interupt** 结束线程,调用此方法后,线程将抛出InterruptedException异常
  • **waitForDie** 等待线程结束. 调用 **Thread.join()** 并忽略 InterruptedException
  • **getThreads** 获取JVM中与当前线程同组的所有线程
  • **getMainThread** 获取进程的主线程

写在最后

给大家推荐一个非常完整的Java项目搭建的最佳实践,也是本文的源码出处,由大厂程序员&EasyExcel作者维护。
github地址:https://github.com/zhuangjiaju/easytools
gitee地址:https://gitee.com/zhuangjiaju/easytools

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • IoTDB 集群高效管理:一键启停功能介绍
  • 数据结构——排序算法(冒泡、快速、选择、插入)
  • Qt中使用RapidJSON
  • Gitea 仓库事件触发Jenkins远程构建
  • 从零编写一个神经网络完成手写数字的识别分类(pytorch实现)
  • 通过Bugly上报的日志查找崩溃闪退原因
  • Rust: 关于Pin以及move前后分析
  • Python基础-循环语句
  • 安全防御,防火墙配置NAT转换智能选举综合实验
  • 在家上网IP地址是固定的吗?
  • Is Temperature the Creativity Parameter of Large Language Models?阅读笔记
  • GitHub+Picgo图片上传
  • Web学习day04
  • 未来互联网的新篇章:深度解析Facebook的技术与战略
  • rust way step 1
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 2017 前端面试准备 - 收藏集 - 掘金
  • Angular Elements 及其运作原理
  • ESLint简单操作
  • JavaScript设计模式系列一:工厂模式
  • Java编程基础24——递归练习
  • mac修复ab及siege安装
  • OSS Web直传 (文件图片)
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • Vue.js-Day01
  • vue-router的history模式发布配置
  • Yii源码解读-服务定位器(Service Locator)
  • 分享几个不错的工具
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 思否第一天
  • 通过几道题目学习二叉搜索树
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #includecmath
  • #Linux(权限管理)
  • (1)Jupyter Notebook 下载及安装
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (2)nginx 安装、启停
  • (2015)JS ES6 必知的十个 特性
  • (Java实习生)每日10道面试题打卡——JavaWeb篇
  • (Matlab)遗传算法优化的BP神经网络实现回归预测
  • (补充)IDEA项目结构
  • (二) 初入MySQL 【数据库管理】
  • (牛客腾讯思维编程题)编码编码分组打印下标题目分析
  • (十三)Maven插件解析运行机制
  • (四)js前端开发中设计模式之工厂方法模式
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转载)OpenStack Hacker养成指南
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • .Net7 环境安装配置
  • .net和jar包windows服务部署
  • .net和php怎么连接,php和apache之间如何连接
  • .NET中分布式服务