-
ArrayList.subList 返回的是由父列表支撑的视图。父列表一旦绕过该视图发生结构修改,视图语义就会失效,常见表现是 ConcurrentModificationException。本文用可运行示例拆开视图、结构修改、复制隔离和安全删除的边界。
-
用 Java Stream Gatherer.ofSequential 实现一个有状态的连续分组中间操作,讲清 initializer、integrator、finisher 的职责、尾组刷出和并行边界。
-
MethodHandle 的 invokeExact 失败,通常不是目标方法找错,而是调用点签名没有与句柄的 MethodType 完全一致。本文用 Java 代码说明如何定位类型差异,并选择 invoke 或 asType 完成适配。
-
Java record 的字段是 final,但可变 List 仍可能通过共享引用被外部修改。本文用 compact constructor 和 List.copyOf 处理集合防御性复制,并说明它不等于深拷贝。
-
Java 26 的 StructuredTaskScope 仍是预览 API。本文用两个并发子任务演示如何配置 timeout、调用 join 获取结果,并解释超时后取消与 close 等待线程结束的边界。
-
用订单标签小项目演示 Stream mapMulti 如何发出零到少量结果,提供完整 Java 示例和预期输出,并比较 flatMap 的子流接口、Consumer 作用域与性能结论边界。
-
Java 虚拟线程出现 BLOCKED 或吞吐下降时,先区分普通等待、载体线程固定和下游资源耗尽,再按 JDK 21–23 与 JDK 24+ 的差异使用线程转储、JFR、Semaphore 和资源边界控制。
-
Java Semaphore 的公平参数不是性能开关,而是等待线程获取许可的排队契约。本文用批量调用限流场景说明 permits、公平与 tryAcquire 超时的边界,给出线程饥饿复现、可靠释放和验收清单。
-
JDK 26 的 JEP 530 第四次预览把基本类型带入更多模式匹配场景。本文从旧写法的分支基线出发,解释 primitive pattern、instanceof 安全转换、switch 的 case 与 when,以及 Object、包装类型和 null 的装箱边界。
-
Java ServiceLoader 找不到实现类时,优先检查 META-INF/services 文件是否进入 JAR、实现类全限定名是否正确,以及模块化项目的 uses/provides 声明。本文按 JAR、模块、ClassLoader 和初始化边界给出一套可执行排查清单。
-
Java Stream gatherer 的关键不只是回调数量,而是中间状态、下游短路和并行合并的边界。本文用固定窗口与无状态映射说明 initializer、integrator、finisher、Downstream.push 和 combiner 的职责。
-
ForkJoinPool 中混入队列、锁或外部 I/O 等阻塞操作时,直接等待可能拖住其他任务。本文用 ManagedBlocker 封装阻塞点,说明 managedBlock 的正确调用、中断处理、池参数边界,以及何时应换用独立 I/O 线程池。
-
Java 可用 MidiSystem.getSequence 读取 MIDI 文件,再通过 Sequence.getTracks 遍历轨道和事件。本文给出完整读取示例,区分事件数量、消息类型与 tick,并说明常见错误。
-
ServiceLoader找不到provider时,先核对META-INF/services文件或module-info.java声明,再检查类加载器、可见性和无参构造器。本文给出一套可复用的配置与排查方法。
-
从大文件上传场景出发,讲清 Java HttpRequest BodyPublisher 的 ofFile、ofInputStream、fromPublisher 与 concat 用法,以及长度、重试、背压和异步边界。