CompletableFuture 超时了,后台任务为什么还在跑
get 等待超时、Future 进入取消状态和工作线程实际退出,是三件不同的事。用 Java 8 实测对比 CompletableFuture 与普通线程池 Future 的 cancel(true),再说明中断、总预算、底层 I/O 和并发名额该怎样衔接,避免接口已经返回、后台工作却持续积压。
get 等待超时、Future 进入取消状态和工作线程实际退出,是三件不同的事。用 Java 8 实测对比 CompletableFuture 与普通线程池 Future 的 cancel(true),再说明中断、总预算、底层 I/O 和并发名额该怎样衔接,避免接口已经返回、后台工作却持续积压。
流式读取时,读超时量的是两段输出之间的间隔;同一个 Read timed out 可能是上游还没开始写,也可能是写到一半。记录怎么在 RestTemplate 里记下有没有输出、退避怎样和总时限一起算,以及用 MockRestServiceServer 和假时钟把这些分支测出来,附带一个营养素被写成英文数词的解析问题。
Optional 是 Java 8 为避免 NPE 而提供的容器类,使用 of、ofNullable、empty 创建实例,内部不可直接 new。常用方法包括:get 在值为空时抛异常;isPresent 判断是否非空;ifPresent 为空时不执行,非空时执行 Consumer;filter 根据 Predicate 过滤返回自身或空 Optional;map 将值映射为新对象并包装;flatMap 直接返回另一个 Optional;orElse、orElseGet、orElseThrow 在值为空时分别返回默认值、惰性 Supplier 或抛自定义异常。文中通过 Person 示例演示各方法用法,并给出 Service 层查询、DAO 返回 Optional 的实战场景,强调根据业务需求选用合适方法以提升代码可读性和安全性。