java教程技术文章
-
Java 命名模块中 ServiceLoader 读不到实现,通常不是接口代码有问题,而是消费模块缺少 uses、实现模块缺少 provides with、提供者不满足 public 构造约束,或实现模块未进入 module path 与解析图。本文用三模块最小示例给出完整排查方法。462 收藏 -
文章 · java教程 | 3天前 | Java · 并发编程 · 虚拟线程 · Java虚拟线程 ForkJoinPool Virtual Threads 调度器并行度 jdk.virtualThreadScheduler.parallelism
Java 虚拟线程调度器可通过 jdk.virtualThreadScheduler.parallelism 单独设置承载平台线程数。本文说明启动参数、验证示例、与 commonPool 及 maxPoolSize 的区别,并给出调优判断方法。459 收藏 -
Java virtual thread 遇到 synchronized 后,锁等待、carrier 固定和平台线程阻塞很容易混为一谈。本文按 JDK 版本、JFR 事件和实际阻塞类型给出排查与修复路径。457 收藏 -
Java ServiceLoader 在模块路径下找不到 provider,通常不是接口实现消失,而是 uses、provides、模块路径或 provider 实例化条件没有同时满足。本文用最小模块示例拆开排查。455 收藏 -
BigDecimal 的 equals 同时比较数值和 scale,而 compareTo 只比较数值。本文用 2.0 与 2.00 说明条件判断、规范化和 HashSet、TreeSet 的选择边界。452 收藏 -
Java虚拟线程适合承载大量等待型请求。本文用按任务创建、资源闸门和有界CPU执行器,说明阻塞I/O服务的线程模型与迁移边界。451 收藏 -
Java虚拟线程支持ThreadLocal,但不适合用它缓存连接、大对象或可复用资源。本文说明状态隔离、remove清理、继承语义与迁移检查边界。451 收藏 -
用 TreeMap 工厂和自定义 Comparator 控制 Java Stream groupingBy 的分组键顺序,并说明时间比较器相等导致键合并的边界。448 收藏 -
围绕 Java 21 pattern switch 和 sealed 类型,说明 permitted 分支覆盖、when 守卫、无守卫兜底、支配关系与 null 边界的实现方法。448 收藏 -
从停顿、吞吐和进程内存余量三个维度比较 G1 与 ZGC,给出 Xmx 估算、统一压测参数、GC 日志指标和灰度回退清单。446 收藏 -
Java CompletableFuture 使用 whenComplete 记录成功值和异常时,如何保持上游结果语义?本文用代码和边界表说明观察、异常传播及验证方法。439 收藏 -
Java record 适合承载请求对象,但校验、默认值和集合可变性必须在紧凑构造器与工厂方法中分清边界。本文用一个请求 DTO 示例说明如何写出稳定的不可变输入。439 收藏 -
CompletableFuture.allOf 返回的是 CompletableFuture,它只负责等待全部任务完成。保留每个子任务的 CompletableFuture,再逐项 join,就能按原顺序收集类型安全的返回值。 437 收藏 -
通过可观察的工厂示例解释 Java Optional.orElse 与 orElseGet 的求值边界,给出默认值成本、副作用、异常语义和代码评审清单,帮助选择真正惰性的默认值写法。436 收藏 -
文章 · java教程 | 2天前 | Java · 异步编程 · Java HttpClient BodyHandlers.fromLineSubscriber Flow.Subscriber 异步响应 按行消费
Java HttpClient 可通过 BodyHandlers.fromLineSubscriber 将文本响应逐行交给 Flow.Subscriber。本文给出带 request(1) 背压、异步处理、状态码分流和异常取消的完整实现。433 收藏