-
Java AsynchronousFileChannel 的 write 是异步提交,写入完成前关闭通道会让未完成操作以 AsynchronousCloseException 失败。本文用回调和 Future 两种方式说明正确的关闭时机。
-
Java HttpClient 使用 BodyHandlers.ofPublisher() 时,响应体 Publisher 只能订阅一次;本文用 Flow.Subscriber 说明 request、cancel、回调和连接复用边界。
-
Java HttpRequest.Builder 的 expectContinue(true) 可以让服务器先确认是否接收请求,再发送较大的请求体。文章结合 BodyPublisher、100 Continue、错误响应和 timeout,说明它适合什么场景、哪里容易误判,以及如何设计可核对的请求边界。
-
通过 G1 Region 大小、humongous 阈值和连续 Region 数量,可以保守估算大对象尺寸区间;本文同时解释 Humongous regions 日志为何不能单独定位某个对象。
-
Java Optional 的 orElse 会先计算默认参数,所以即使 Optional 有值,默认方法也可能执行。本文用最小示例解释 orElse 与 orElseGet 的求值时机和选择边界。
-
用一个可复查的缓存刷新场景,说明 Java ReentrantReadWriteLock 从写锁降级到读锁的正确顺序、异常释放边界与验证方法。
-
Java 插件需要独立的类加载边界时,可以用 ModuleFinder 和 Configuration 解析模块图,再用 defineModulesWithManyLoaders 为不同插件模块建立独立 ClassLoader。本文说明父层、exports、可读性和常见加载失败的排查方法。
-
Java 21 虚拟线程出现 pinning 时,先用 JFR 或 jdk.tracePinnedThreads 定位持锁阻塞,再把频繁且可能长时间等待的 I/O 移出 synchronized;短时内存临界区不必盲目改写。
-
Java record 接收接口 JSON 时,额外字段是否报错不由 record 单独决定,而由 Jackson 的未知属性策略决定。本文用最小示例说明局部注解、全局 ObjectMapper 和 ObjectReader 的边界,并给出上线前的兼容性检查清单。
-
Java Stream Gatherer 需要在输入耗尽后输出计数、最后元素或摘要时,应把数据保存在状态对象中,让 integrator 继续消费输入,再由 finisher 向下游推送尾部结果。本文说明 ofSequential 的写法、空流与短路边界,以及何时改用 Gatherers.fold。
-
开发 TCP 程序时,第一步通常都是先把服务器端搭起来。JDK 的 ja va.net 包里专门提供了一个 ServerSocket 类,它的实例对象就可以用来实现服务器端程序。查一下 API 文档就会发现,ServerSocket 类提供了不止一种构造方法,下面就按这个思路,把这些构造方法逐一讲清
-
并行流不是把线程数调大就会变快。本文用同一批数据对比串行流与并行流,解释 ForkJoinPool.commonPool 的参与方式、任务粒度、共享资源和压测边界,帮助你在真实服务里做出可复核的选择。
-
用一个三模块示例说明 Java ServiceLoader 如何通过 uses 与 provides with 在模块路径中注册并发现服务实现,同时给出编译、启动和空结果排查清单。
-
Java MethodHandles.Lookup 不是绕过权限的万能钥匙。本文用 privateLookupIn、findVirtual 和 lookupModes 拆开私有成员访问的调用链,并验证同模块、跨模块和模块未开放时的边界。
-
介绍 Java 虚拟线程配合 Semaphore 限制数据库或外部接口并发的最小写法,覆盖许可数设计、中断、超时、异常释放和验证方法。