java教程技术文章
-
Java Stream 收集 Map 时,按键唯一性、重复键策略和并行语义选择 toUnmodifiableMap、带合并函数的 toMap 或 toConcurrentMap,再用 Map.copyOf 发布不可变快照。155 收藏 -
多个 Java ModuleLayer 同时存在时,不要用父层、同名模块或类加载器是否相同来猜 reads 关系。本文用 Module.canRead、addReads、findModule 和 findLoader 建立可观察的判断方法。361 收藏 -
Java 插件需要独立的类加载边界时,可以用 ModuleFinder 和 Configuration 解析模块图,再用 defineModulesWithManyLoaders 为不同插件模块建立独立 ClassLoader。本文说明父层、exports、可读性和常见加载失败的排查方法。381 收藏 -
从异常中的模块与包名入手,区分 exports、opens 和读取关系,给出 Java 反射 setAccessible 失败的诊断代码与最小修复方案。227 收藏 -
Java 模块反射报访问被拒绝时,先看调用是否需要深反射:exports 面向公开类型和成员,opens 面向运行时访问包内全部成员。本文用 module-info.java、--add-opens 和 Module API 给出排查与落地方法。100 收藏 -
文章 · java教程 | 1天前 | 序列化 · Record · Java教程 · 兼容性 · java Serializable ObjectInputStream ObjectOutputStream record
Java record 实现 Serializable 后,序列化状态由 record 组件决定,反序列化会调用规范构造器;普通可序列化类的重建路径和自定义钩子不同。本文用最小示例划清两者边界。313 收藏 -
Java record 需要校验或归一化参数时,可以在紧凑构造器中直接处理隐式参数;本文说明 public 访问级别、字段赋值限制、浅不可变集合和反射读取组件的迁移边界。156 收藏 -
Java 虚拟线程解决的是大量任务在阻塞等待时的并发容量,不会增加 CPU 核心,也不会让单个计算更快。本文用载体线程、调度器和执行器示例说明 CPU 密集任务的正确拆分方式。448 收藏 -
Java 虚拟线程适合高并发、以 HTTP、JDBC 等 I/O 等待为主的任务编排,但不能替代 CPU 并行、连接池和下游限流。本文用代码和边界表说明如何选择。387 收藏 -
Java StructuredTaskScope 仍是预览 API,适合请求内并行子任务的统一等待、失败传播和超时取消,不适合替代持久队列或长期后台任务。347 收藏 -
Java 项目拆成模块后,反射访问被拒绝通常不是反射 API 失效,而是 exports、opens 或调用方模块关系没有满足访问边界。本文用最小配置说明如何判断并收窄修复范围。391 收藏 -
用 JFR 的事件阈值、一次性录制时长和 jfr 结果读取,捕获 Java 服务一个有限的慢请求窗口,并区分网络等待、锁等待与应用执行线索。395 收藏 -
文章 · java教程 | 1天前 | 并发编程 · Java教程 · ConcurrentHashMap · java concurrenthashmap 并发map computeIfAbsent 递归更新
ConcurrentHashMap.computeIfAbsent 的映射函数不能递归更新同一键。本文解释原子计算边界、IllegalStateException 的成因,并用局部解析状态加 putIfAbsent 演示如何拆分递归计算与共享缓存发布。323 收藏 -
Java CompletableFuture 超时并不会自动停止底层任务。本文用可取消的 Future 连接超时结果与执行器任务,说明 Future.cancel(true)、线程中断和 I/O 超时该如何配合。175 收藏 -
Spring Retry 只能控制临时异常的再次调用,不能单独保证消息幂等。本文用稳定 messageId、inbox 唯一约束、事务边界和外部接口幂等键,说明如何避免异常重试造成重复处理。445 收藏