java教程技术文章
-
Java 25 的 StructuredTaskScope 通过 fork、join 和 close 管理并发子任务:失败或超时可以取消同组任务,但子任务仍需正确响应中断,close 才能真正收口。341 收藏 -
Java virtual thread 遇到 synchronized 后,锁等待、carrier 固定和平台线程阻塞很容易混为一谈。本文按 JDK 版本、JFR 事件和实际阻塞类型给出排查与修复路径。457 收藏 -
Java 高并发统计计数优先考虑 LongAdder:它通过分散内部计数降低更新竞争,再用 sum 汇总;AtomicLong 则更适合序列号、额度和需要原子读改写的精确状态。本文对比两者的吞吐、读取、重置和迁移边界。243 收藏 -
FileChannel.map 不是把整个文件装进 Java 堆。处理超大文件时应使用固定窗口、限制活跃映射数量,并处理跨窗口记录;Java 22+ 还可用 MemorySegment 和 Arena 管理生命周期。391 收藏 -
Files.walk 的 maxDepth 从起始 Path 的深度 0 开始,所以当前目录始终会出现在结果中。本文用层级示例讲清深度、过滤、资源关闭和 API 选择。178 收藏 -
Java Pattern 的 UNICODE_CHARACTER_CLASS 只负责让 \d、\s、\w 等预定义字符类采用 Unicode 语义;如果规则只针对字母、脚本或数字属性,可直接使用 \p{...}。本文用边界样例说明如何选择编译标志,避免正则匹配范围意外放大。347 收藏 -
Java sealed interface 扩展失败时,先检查 permits 中的类型是否可访问且确实直接 implements 或 extends 该接口,再核对 final、sealed、non-sealed 续封修饰符,最后区分 named module 与 unnamed module 的包边界。本文用最小编译矩阵逐项定位这些错误。128 收藏 -
Java record 适合表达由多个字段组成的 Map key 值对象,因为它按组件生成 equals 和 hashCode;本文同时说明浅层不可变、集合组件和防御性拷贝的边界。346 收藏 -
BigDecimal.divide 不指定舍入规则时,遇到 1/3 这类非终止小数会抛出 ArithmeticException。本文按金额小数位、有效数字和严格校验三种场景说明如何选择 scale、MathContext 与 RoundingMode。266 收藏 -
Java HttpClient 没有直接的 multipart 表单构造器,需要自己处理 boundary、CRLF、文件段和长度。本文给出可计算长度的拼接方案,并说明大文件如何改用可重复创建的流式请求体。225 收藏 -
CompletableFuture.allOf 只能告诉你一组并发任务的聚合结果失败,不能直接定位具体任务。本文用 handle 保存每个任务的标识、成功值和原始异常,再结合 allOf 生成可重试、可告警的失败清单。429 收藏 -
Java Optional 的 empty 表示没有值,不等于异常。通过 map、filter 和 orElseThrow 的边界设计,可以保留真实故障并稳定处理缺省结果。242 收藏 -
讲清 Java Stream 使用 groupingBy 搭配 maxBy 获取每组最大时间记录的方法,并比较 Optional 展平、toMap 合并、空值和并列时间的处理边界。426 收藏 -
Java HttpClient 的 sendAsync 收到 404 时,future 通常会正常完成,因为 404 是合法 HTTP 响应而非传输异常。本文用代码区分状态码、超时、连接失败和响应体处理错误。483 收藏 -
Java HttpClient 的 sendAsync 返回可取消的 CompletableFuture。本文区分请求级超时与业务主动取消,给出保留原始 future、定时 cancel、异常分类和响应体收尾的完整写法。240 收藏