《Java 编程实战》9.2 虚拟线程:在 libraryd 里替换平台线程
JDK 25 的虚拟线程早已不是预览特性。本节先在同一个 JVM 参数下对比 2000 个平台线程与 2000/100000 个虚拟线程的创建耗时和 RSS,再用 Javalin 7.2.4 的 concurrency.useVirtualThreads 打开虚拟线程,最后用 JFR 确认 synchronized 在 JDK 25 里不再 pin,并说明结构化并发为何仍不进入本卷。
tag
JDK 25 的虚拟线程早已不是预览特性。本节先在同一个 JVM 参数下对比 2000 个平台线程与 2000/100000 个虚拟线程的创建耗时和 RSS,再用 Javalin 7.2.4 的 concurrency.useVirtualThreads 打开虚拟线程,最后用 JFR 确认 synchronized 在 JDK 25 里不再 pin,并说明结构化并发为何仍不进入本卷。
进程收到 SIGTERM 时,libraryd 正在处理的借阅请求会不会被切断,连接池和定时任务会不会来不及收尾。本节用两次真实停机实验对比 stopTimeout=0 与 10 秒的差别,再给出 LibraryApplication 的关闭顺序、幂等关闭、启动失败回滚和 shutdown hook 的完整写法。
libraryd 的每个 handler 都在重复读请求头、拼日志、记耗时。本节用 Javalin 的 before/after 把请求 ID、MDC、访问日志和指标收进中间件,并用真实执行顺序说明异常处理器与 after 的先后关系,最后给出请求头信任、MDC 清理与指标基数的边界。
libraryd 的服务层已经能借书还书,却还没有 HTTP 入口。本节用 Javalin 7.2.4 把路由挂在配置对象上,接通路径参数、查询参数、分页默认值与 Jackson,并用真实请求验证 201、204、Location、日期序列化和内容类型检查,最后给出完整路由清单。