Java中并发下的ThreadlocalRandom的实现
目录1. 背景2.为什么要用ThreadLocalRandom1. 背景
在看同事写的代码的时候发现代码里有很多像:
如果我们想要生成一个随机数,通常会使用Random类。但是在并发情况下Random生成随机数的性能并不是很理想,今天给大家介绍一下JUC包中的用于生成随机数的类–ThreadLocalRandom.(本文基于JDK1.8)
当然Random随机数也 ...
Java简单方法实现子任务耗时统计
目录背景核心思路代码实现1. 定义时间记录字段2. 在构造函数中记录提交时间3. 在 call() 方法中记录执行时间4. 计算各阶段耗时5. 上报监控指标设计要点使用示例总结背景
在并发编程中,我们经常需要将一个大任务拆分成多个子任务并行执行。但随之而来的问题是:如何准确统计每个子任务的耗时?
传统的做法是在业务代码中手 ...
删除IDEA中的JDK列表项实现方式
目录1.背景2.解决方法3.总结1.背景
我卸载JDK了,但在IDEA里面创建项目的时候,仍然能看到已经卸载的JDK版本,对于有强迫症的我来说这是非常不舒服的。
2.解决方法
进入一个项目里面
打开项目结构
打开SDK
找到你不想要的jdk版本
点击上面的减号去掉
有可能不一定能一次成功,有时候去掉了还会存在
可能需要反复多试几次 ...
Java实现Word转PDF的两种常见方案和性能实测
目录一、测试目标与原则二、测试环境三、项目结构四、Maven 依赖(pom.xml)五、LibreOffice 转 PDF 实现六、docx4j 转 PDF 实现七、性能统计工具(P50 / P95)八、压测主程序(BenchMain)九、实测结果十、为什么差距这么大?十一、结论本文对比了Java后端开发中Word转PDF的两种常见方案:docx4j(纯Java实现)和LibreOffi ...
剑指offer-63、数据流中的中位数
题⽬描述
如何得到⼀个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使⽤ Insert() ⽅法读取数据流,使⽤ GetMedian() ⽅法获取当前读取数据的中位数。
思路及解答
排序列表法
...
Java编写自定义重试工具类的示例代码
目录1 重试工具类 RetryUtils源码2 使用方式示例1:任务无返回值示例2:任务有返回值、需校验返回值示例3:任务有返回值、无需校验返回值Java重试工具类,零依赖。可配置项:接受的异常类型、返回值校验、最大重试次数、重试间隔时间。
1 重试工具类 RetryUtils源码
RetryUtils:
使用了lombok的@Slf4j注解用于打印日志,不 ...
JVM内存与CPU占用过高问题定位及解决
目录前言一、示例代码二、运行代码三、top命令四、问题定位1、查看java进程所有的线程列表2、输出线程882292十六进制五、输出java堆栈信息六、pid_882245_dump.txt总结前言
如果开发过程中代码存在不规范漏洞,Java程序在运行时就很有可能会出现:内存(溢出、泄漏)、CPU占用过高。
本篇文章将通过一个简单的例子给大家演 ...
浅析Java如何利用Spire.PDF for Java实现将PDF转换为Word
目录Spire.PDF for Java 库简介与安装将 PDF 转换为固定布局的 Word 文档将 PDF 转换为流动形态的 Word 文档总结在日常开发和办公中,PDF 格式以其稳定的版式和跨平台兼容性广受欢迎。然而,当我们需要对 PDF 内容进行编辑、修改或复用时,其不可编辑的特性便成了棘手的难题。手动复制粘贴不仅效率低下,还可能丢失格式信息 ...
Mybatis-Plus中@TableField失效的解决方案
目录问题描述原因分析解决方法总结问题描述
mybatisplus默认开启驼峰命名,所以一般不需要使用@TableField注解,但是我在项目中就算加上了该注解,在日志中的select语句中也显示是departmentId。
原因分析
默认情况下Mybatis-Plus会根据@TableFiled生成别名,
而自己指定了QueryWrapper的select属性后就仅仅是属性值而没有 ...
MyBatis映射器模块最佳实践
目录一、MyBatis整体架构与映射器模块1.1 映射器模块的核心职责1.2 为什么需要Mapper?1.3 Mapper的使用方式二、Mapper接口架构2.1 Mapper接口定义2.2 Mapper接口特点2.3 MapperRegistry注册中心三、SQL语句映射3.1 XML配置方式3.2 注解配置方式3.3 混合配置方式四、动态代理实现4.1 MapperProxyFactory代理工厂4.2 MapperP ...
SpringMvc(Interceptor,Filter)实现方案
目录1. 过滤器 (Filter)实现方案一:通过@WebFilter注解(Servlet 原生)实现方案二:通过FilterRegistrationBean(Spring Boot统一管理生命周期 推荐)2. 拦截器 (Interceptor)需要继承/实现的类注册拦截器3. 核心区别对比表简单总结:为什么跨域请求要通过过滤器实现?1. 预检请求(OPTIONS)的拦路虎2. 为什么选择 ...
springboot修改端口号的实现方式
目录一、在 application.properties二、在 application.yml或在 application.yaml文件中修改三、总结一、在 application.properties
在properties文件添加server.port=端口号
示例:将默认端口号修改为8888
.在resource文件下创建一个application.properties文件
二、在 application.yml或在 application.yaml文件中修改
...
JAVA搭建虚拟机运行环境的流程分析
目录在Windows上使用VMware搭建Ubuntu虚拟机的详细教程一、环境准备二、VMware安装与配置三、Ubuntu安装流程四、安装后优化五、注意事项六、版本推荐在Windows上使用VMware搭建Ubuntu虚拟机的详细教程
一、环境准备
硬件要求
CPU:支持虚拟化技术(Intel VT-x / AMD-V)内存:≥8GB(推荐预留4GB给虚拟机)磁盘空间:≥ ...
SpringBoot通过URL地址获取文件的多种方式
目录1. 使用 Java 原生的 URL 和 HttpURLConnection2. 使用 Spring 的 RestTemplate3. 使用 RestTemplate 配置类4. 使用 WebClient(响应式,Spring 5+)5. 完整的 Controller 示例6. 添加依赖(Maven)7. 异常处理和优化建议使用示例注意事项在Spring Boot中,可以通过URL地址获取文件有多种方式。以下是几种常见的方法:
...
java Arrays.asList 返回什么与普通 ArrayList 区别介绍
目录核心结论详细区别与解释代码示例为什么会这样设计?如何得到一个真正可变的ArrayList?核心结论
它返回什么? Arrays.asList() 返回一个由指定数组支持的、固定大小的 List 视图。有区别吗? 有巨大区别。它返回的不是我们常用的 java.util.ArrayList,而是一个内部自定义的、行为受限的类。
详细区别与解释
我们可以通 ...
Java标准库中Thread类的基本用法总结大全
目录前言Thread 类的基本用法有:一、线程创建方式1:继承Thread类,重写run方法!方式2:实现 Runnable, 重写 run方法方式3: 继承Thread, 重写run, 使用匿名内部类方式4: 实现Runnable, 重写run, 使用匿名内部类方式5: 使用lambda表达式二、线程中断 - interrupt()三、线程等待 - join()四、线程休眠 - sleep()五、获取线程 ...
Java CAS原理和用法总结
目录一、CAS 原理1. 核心思想2. 操作模型3. 工作流程4. 优点与缺点二、Java 中的 CAS 用法1. 主要的原子类2. 核心方法3. 代码示例总结一、CAS 原理
1. 核心思想
CAS 是一种无锁的原子操作机制。它的核心思想是:我认为值应该是A,如果是,那我就把它改成B;如果不是A(说明被别人改过了),那我就不修改,然后可以选择重试 ...
浅析Spring Validation参数校验的实现原理与进阶用法
目录1、简单使用引入依赖requestBody参数校验requestParam/PathVariable参数校验统一异常处理2、进阶使用分组校验嵌套校验集合校验自定义校验编程式校验快速失败(Fail Fast)@Valid和@Validated区别3、实现原理requestBody参数校验实现原理方法级别的参数校验实现原理摘要:本文首先阐述了JSR303规范与Hibernate Validator的 ...
springboot devtools 热重启配置方法
加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 仅在开发环境生效 -->
</dependency>
加build配置:
<!-- 确保 Maven 插件开启 fork 模式(已存在可忽略) -->
<build>
<plugins>
...
Java Thread.join()方法使用详细解析
目录前言一、核心定位二、重载方法关键说明三、工作原理1. 核心逻辑2. 与Thread.sleep()的核心区别四、实战示例示例 1:无参join()- 主线程等待子线程完全执行运行结果(顺序固定)示例 2:带超时join(long millis)- 主线程等待超时后继续执行运行结果(主线程超时后提前执行)示例 3:多个线程join()- 串行等待 vs 并行等 ...