java教程技术文章
-
用 Java HttpClient.sendAsync 发起异步请求,结合 BodyHandler 和 CompletableFuture 读取响应正文,并区分 HTTP 状态、网络异常与回调异常。468 收藏 -
用 Java jcmd 排查运行中 JVM 的线程问题:先通过 jcmd -l 确认 PID,再用 Thread.print -l 查看线程栈和并发锁,必要时用 Thread.dump_to_file 导出 plain 或 JSON 转储,并说明权限、容器与结果判断边界。452 收藏 -
Spring WebFlux 的 flatMap 并发只作用于单次订阅。通过单例非阻塞许可约束实例共享下游调用,结合响应体缓冲、连接等待与取消边界,说明背压能控制什么,以及容量不足时如何处理。187 收藏 -
Java CDS 默认归档可以复用核心类元数据;固定启动命令的应用还可以用 AppCDS 动态归档覆盖应用类,从而减少启动阶段重复加载。本文给出生成、加载和排查归档失效的最小方案。112 收藏 -
围绕 Spring Boot Actuator 的 HTTP 端点暴露,说明 include、exclude、health 详情可见性与 Spring Security 访问边界的配置方式。389 收藏 -
用一个 Java 多语言小项目说明 ResourceBundle.Control 如何控制候选 Locale、默认 Locale 回退和 root 资源包,避免缺少翻译时落到不期望的语言。118 收藏 -
Java System.Logger 怎样避免低级别日志提前构造复杂参数?本文拆开 isLoggable、Supplier 和日志后端的责任边界,给出两种写法、选择表与常见误区。454 收藏 -
从 lookup()、in() 到 privateLookupIn(),梳理 Java MethodHandles.Lookup 在同模块与跨模块场景中的权限变化。276 收藏 -
Java VarHandle 的 acquire/release 不是“弱版 volatile”的简单替换:写线程用 setRelease 发布状态,读线程必须用同一个状态变量的 getAcquire 观察到发布值,随后读取的数据才获得对应的排序与可见性保证。本文用一个发布数据的小例子说明配对关系和排查清单。151 收藏 -
Java 9 起可以用 Matcher.replaceAll(Function) 按每次匹配的捕获组动态生成替换文本。本文说明从固定字符串迁移的写法、null 与空字符串边界、特殊字符转义和 Matcher 状态注意事项。 193 收藏 -
Java Map.copyOf 可以把现有 Map 固定为拒绝 null、不能修改且不随源 Map 后续变化的不可变映射快照。本文对比只读视图,说明 null、浅复制和迭代顺序边界,并给出迁移取舍。175 收藏 -
Java Files.getLastModifiedTime 默认会按目标对象读取符号链接的时间;要读取链接目录项自身,应传入 LinkOption.NOFOLLOW_LINKS。本文结合一次文件时间排查,说明两种语义、异常边界和封装方式。298 收藏 -
Java Virtual Threads 适合以每任务线程承接等待型工作,而非建立固定虚拟工作池。本文用有限批次与提交窗口说明准入控制,结合完成队列、Future 取消、客户端超时和执行器关闭,明确依赖容量与收尾边界。318 收藏 -
Java ModuleLayer 的隔离边界由 Configuration 可读图、父层关系、模块 exports/opens 和类加载器映射共同决定。本文用动态插件示例说明 OneLoader、ManyLoaders 与跨层接口设计。112 收藏 -
Java Optional.or 使用 Supplier 延迟构造备用 Optional,适合缓存回源、分层配置和多级查找。本文说明惰性执行、or 与 orElseGet 的返回差异,以及 null 和空结果边界。254 收藏