java教程技术文章
-
围绕 Java Thread.Builder.OfVirtual 讲清 uncaughtExceptionHandler 的绑定位置、start/unstarted/factory 的继承边界,以及虚拟线程未捕获异常的日志兜底方式。139 收藏 -
Java Optional 的 orElse 会先求值默认参数,orElseGet 则只在 Optional 为空时调用 Supplier。通过最小实验、参数求值规则和工程边界,快速判断两种写法。138 收藏 -
Java ExecutorService 关闭时,先用 shutdown 拒绝新任务,再用 awaitTermination 等待;超时后以 shutdownNow 兜底,并正确处理中断和未启动任务。136 收藏 -
Java MemorySegment 的跨线程访问范围由关联 Arena 决定:Arena.ofConfined 只允许所有者线程访问,Arena.ofShared 允许任意线程访问。本文给出 JDK 22 后的最小写法、切片边界和迁移检查。132 收藏 -
Java JFR 降低诊断开销的关键不是关闭记录,而是先选对配置,再按事件设置 period、threshold 和 stackTrace,最后检查 JFR 文件是否包含足够证据。129 收藏 -
Java sealed interface 扩展失败时,先检查 permits 中的类型是否可访问且确实直接 implements 或 extends 该接口,再核对 final、sealed、non-sealed 续封修饰符,最后区分 named module 与 unnamed module 的包边界。本文用最小编译矩阵逐项定位这些错误。128 收藏 -
Java record 的字段是 final,但组件对象未必不可变。把带 List 等可变组件的 record 当作 HashMap 键时,组件内容变化会让 hashCode 改变,导致 get 或 containsKey 定位失效。128 收藏 -
Stream.toList() 从 Java 16 起返回不可修改的 List。本文说明它与 Collectors.toList()、toUnmodifiableList() 和 toCollection(ArrayList::new) 的差异,并给出 UnsupportedOperationException、Java 版本和 null 边界的排查方法。127 收藏 -
JEP 465 撤回后,已有 STR 与自定义模板处理器代码应按用途迁移到稳定 API,并保留格式化、国际化与安全边界。123 收藏 -
Java Stream.peek 是惰性中间操作,可能因没有终止操作、短路或实现优化而少执行。本文拆开触发边界,并给出把业务副作用移到可靠位置的重构方式。121 收藏 -
分代 ZGC 是否适合,不能只看堆大小。本文从暂停目标、存活集、分配速率、并发回收余量和机器内存出发,给出 Xmx、SoftMaxHeapSize 与收集器选择的判断方法。118 收藏 -
Java 25 的 StructuredTaskScope 可以在 open 时通过 withTimeout 配置整个作用域的统一超时。本文用一个双子任务示例说明超时起点、TimeoutException、取消中断和 close 等待边界,并补充旧版 joinUntil 的差异。118 收藏 -
文章 · java教程 | 3星期前 | 虚拟线程 · Java StructuredTaskScope Java结构化并发 Java子任务取消 StructuredTaskScope结果汇总 Java虚拟线程并发
围绕 JDK 25/26 预览 API,讲清 Java StructuredTaskScope 如何组织子任务、在失败时取消未完成任务,并通过 join 与 Subtask.get 汇总结果,同时比较它与 CompletableFuture、ExecutorService 的适用边界。117 收藏 -
Java Gatherer 中只有在 integrator 不会因业务条件提前停止输入时,才适合用 Integrator.Greedy 表达契约。本文从返回值、下游信号、并行合并和边界场景说明判断方法。112 收藏 -
用 Java ScopedValue 传递请求上下文时,绑定位置、线程边界和版本 API 是最容易出错的地方。本文给出配置示例与排查清单。107 收藏