java教程技术文章
-
Java 25+ 中用 ScopedValue 传递只读请求上下文,重点比较它与 ThreadLocal 的生命周期、可见性、嵌套绑定和结构化子任务继承边界。364 收藏 -
多个 Java ModuleLayer 同时存在时,不要用父层、同名模块或类加载器是否相同来猜 reads 关系。本文用 Module.canRead、addReads、findModule 和 findLoader 建立可观察的判断方法。361 收藏 -
Java Record 的 final 组件不等于集合不可变。本文用 ArrayList、unmodifiableList 和 List.copyOf 对比可变、只读视图与防御性拷贝,帮助排查 Record 中集合被外部修改的问题。359 收藏 -
已知 HashMap 的预计映射数时,不要直接把条目数当初始容量;本文用默认负载因子 0.75 说明估算公式、JDK 19+ 的 newHashMap 和容量过大的代价。350 收藏 -
Java Files.find 和 Files.walk 都能搜索文件树,但过滤条件的落点不同:属性条件优先放进 find,路径流组合和后续转换更适合 walk。本文用可关闭资源的示例说明 maxDepth、BasicFileAttributes、filter 和异常边界。348 收藏 -
Java StructuredTaskScope 仍是预览 API,适合请求内并行子任务的统一等待、失败传播和超时取消,不适合替代持久队列或长期后台任务。347 收藏 -
Java Pattern 的 UNICODE_CHARACTER_CLASS 只负责让 \d、\s、\w 等预定义字符类采用 Unicode 语义;如果规则只针对字母、脚本或数字属性,可直接使用 \p{...}。本文用边界样例说明如何选择编译标志,避免正则匹配范围意外放大。347 收藏 -
Files.walk 返回的 Stream会持有遍历目录的资源,正确做法是用 try-with-resources 包住完整操作,并区分创建、懒遍历和关闭阶段的异常。 347 收藏 -
Java record 适合表达由多个字段组成的 Map key 值对象,因为它按组件生成 equals 和 hashCode;本文同时说明浅层不可变、集合组件和防御性拷贝的边界。346 收藏 -
Java Stream.toList() 返回的是不可修改 List,直接 add 会抛出 UnsupportedOperationException。本文对比 toList、Collectors.toList 和 toCollection(ArrayList::new),说明需要追加元素时的正确写法。344 收藏 -
Java 25 的 StructuredTaskScope 通过 fork、join 和 close 管理并发子任务:失败或超时可以取消同组任务,但子任务仍需正确响应中断,close 才能真正收口。341 收藏 -
文章 · java教程 | 2天前 | 异常处理 · 并发编程 · api设计 · Java教程 · CompletableFuture · java 异常处理 异步编程 completablefuture Handle 统一结果
用 CompletableFuture.handle 同时处理成功值和异常,把异步调用统一转换为稳定的业务结果对象,并对比 exceptionally、whenComplete 的适用边界与常见误区。338 收藏 -
Java NIO WatchService 默认只监听已经注册的目录。本文用递归注册、动态补注册和 WatchKey 映射解决子目录事件遗漏。338 收藏 -
文章 · java教程 | 5天前 | 并发编程 · Java教程 · ConcurrentHashMap · java concurrenthashmap 并发map computeIfAbsent 递归更新
ConcurrentHashMap.computeIfAbsent 的映射函数不能递归更新同一键。本文解释原子计算边界、IllegalStateException 的成因,并用局部解析状态加 putIfAbsent 演示如何拆分递归计算与共享缓存发布。323 收藏 -
讲清 Java HttpClient WebSocket 的 Listener 回调、request(1) 背压、文本分片与 sendClose、abort 关闭顺序,并给出可落地的异步监听器写法。315 收藏