-
用 PreparedStatement.addBatch 收集多组参数,在明确的提交窗口中执行 JDBC 批量写入;本文同时说明自动提交、更新计数、BatchUpdateException 与失败回滚的处理边界。
-
Java 的 IsoFields.WEEK_BASED_YEAR 遵循 ISO 周年规则,年末几天可能已经属于下一周年度。本文用 LocalDate 和 DateTimeFormatter 说明普通年份、ISO 周年、YYYY 与 yyyy 的区别,并给出报表分组和测试建议。
-
Java Stream 收集 Map 时,按键唯一性、重复键策略和并行语义选择 toUnmodifiableMap、带合并函数的 toMap 或 toConcurrentMap,再用 Map.copyOf 发布不可变快照。
-
Java MemorySegment 切片应分别检查 offset、newSize 和剩余字节数,核心条件是 newSize 不大于 byteSize() - offset,避免 offset + newSize 的 long 溢出。本文给出可复用封装,并区分空间越界、布局对齐与生命周期异常。
-
Java 25 的 Stable Values 预览 API 可把手写 volatile、synchronized 和两次判空收敛为线程安全的一次性延迟初始化。本文说明改写方法、并发语义与采用边界。
-
ThreadLocal 在线程池中不会随着任务结束自动清空,工作线程复用会让下一个任务读到上一个任务留下的值。本文用 Java线程池 和可运行示例拆开 get、set、remove 的生命周期,给出 finally 清理、任务装饰和验收边界。
-
Java DirectoryStream 创建后必须关闭,遍历 I/O 错误会包装为 DirectoryIteratorException。本文从手写关闭迁移到 try-with-resources,说明如何提取 IOException 原因并保留 close 阶段的 suppressed exception。
-
Java 21 的 SequencedMap 如何读取、删除和调整首尾键值?本文用 LinkedHashMap 说明 firstEntry、pollFirstEntry、putFirst 与 reversed 的用法和边界。
-
completeOnTimeout 会在超时后用兜底值正常完成,orTimeout 会以 TimeoutException 异常完成。本文从业务语义、下游处理、共享 Future 与任务取消边界出发,给出选择方法和代码示例。
-
Java ExecutorService 的 close 会先拒绝新任务,再等待已提交任务完成并终止线程池。本文用小实验区分 close、shutdown、shutdownNow 与 awaitTermination 的等待语义,并给出中断和超时处理写法。
-
Java HttpClient 的 BodyHandlers.ofLines() 会把响应正文转换为按行消费的 Stream。本文从最小 GET 示例开始,说明响应状态、字符集、换行、提前结束和资源关闭边界,并比较它与 ofString、ofInputStream 的适用场景。
-
Java VarHandle 的 acquire/release 不是“弱版 volatile”的简单替换:写线程用 setRelease 发布状态,读线程必须用同一个状态变量的 getAcquire 观察到发布值,随后读取的数据才获得对应的排序与可见性保证。本文用一个发布数据的小例子说明配对关系和排查清单。
-
区分 JDBC executeBatch 与事务 commit,给出分块执行、最后提交一次的原创示例,解释批更新计数、回滚失败、提交结果未知和分块提交的业务恢复边界。
-
Java AttributedCharacterIterator 的关键不是逐字符判断属性,而是用 getRunStart 和 getRunLimit 取得当前属性连续区间,再按半开区间读取文本。本文说明单属性、属性集合和全部属性遍历时的边界写法。
-
Java 虚拟线程出现 carrier 被固定时,先按 JDK 版本判断 synchronized 是否属于 pinning 来源,再用 JFR 的 jdk.VirtualThreadPinned 和 jdk.tracePinnedThreads 定位阻塞栈,最后决定保留 synchronized、拆分临界区或改用 ReentrantLock。