-
必须用CyclicBarrier而不是CountDownLatch的场景是多轮重复同步,即每轮所有线程必须互相等待到齐才共同推进,因其可自动重置复用,而CountDownLatch一次性不可重用。386 收藏 -
getOrDefault能替代if-else空判断,因其将“查不到就用默认值”逻辑封装为一次调用,语义明确、性能更优,但不写入Map且无法区分null是未命中还是真实值。149 收藏 -
@Retention声明注解保留阶段,需用javap-v查字节码中RuntimeVisibleAnnotations等属性,并结合反射实测验证:SOURCE级不出现,CLASS级可见但反射不可获取,RUNTIME级既可见又可反射获取。209 收藏 -
模块描述文件强制依赖分层的核心是将架构约束转为机器可验证契约,在编译或CI阶段拦截越界访问;需选对载体(如ArchUnitDSL、ArchGuard配置或Java模块元数据),覆盖字段、方法参数、泛型、注解四类变量级依赖场景,并配套CI卡点、IDE提示与修复模板。198 收藏 -
join()阻塞调用线程而非目标线程,依赖目标线程存活状态,底层通过synchronized锁目标线程对象并配合wait/notifyAll实现等待唤醒,必须先start再join才能确保同步。219 收藏 -
正确生成不重复随机数需用洗牌算法或ThreadLocalRandom;避免重复种子,复用Random实例,多线程优选ThreadLocalRandom,唯一性需求结合UUID或时间戳。365 收藏 -
模块化系统不能直接限制Unsafe操作,但能提高滥用门槛和可检测性:通过封装隐藏访问路径、显式声明opens权限、隔离专用模块、启用非法访问禁止策略,并用VarHandle等标准API替代。347 收藏 -
核心是构建严格锚定、分段清晰、边界明确的正则表达式:以^TEST_PROCESS_[a-z]+(?:_PRODUCT(?:_NEW)?)?$确保仅匹配合法形式,排除双下划线、大小写混用、前缀错误等所有非法变体。148 收藏 -
变量访问异常若源于exports目标模块名错误,本质是模块导出与导入名称不匹配,多见于CommonJS或混合环境;需严格核对导出方式(默认/命名)、导入语法、路径解析及循环依赖等问题。465 收藏 -
使用Optional.ofNullable可清晰统一处理前端模糊查询参数的判空、去空格和转like模式逻辑,避免因空值导致全表扫描,提升代码可读性与可维护性。141 收藏 -
CopyOnWriteArrayList遍历时不用加锁因其迭代器基于底层数组的不可变快照,写操作通过原子替换引用更新数组,读写互不阻塞;但写操作本身使用ReentrantLock,仅读操作无锁。233 收藏 -
关键在于显式指定字符集:用InputStreamReader/OutputStreamWriter传入StandardCharsets.UTF_8等编码,避免依赖系统默认编码导致跨平台中文乱码;环境变量传递需编码对齐,敏感内容建议Base64编码。425 收藏 -
ServiceLoader是轻量级服务发现机制,基于META-INF/services配置动态加载接口实现类,不支持变量级自动注入;它实现多实现动态选择、运行时插件加载与调用方解耦。306 收藏 -
Timer.cancel()不能中断正在执行的TimerTask,仅清空队列并停止调度线程;需在run()中检查中断状态或使用volatile标志位,配合purge()和置null,或改用支持中断的ScheduledExecutorService。223 收藏 -
Java字符串常量池调优需根据实际intern字符串数量和冲突率合理设置-XX:StringTableSize,目标是平均桶长≤1.5,优先验证是否真需调整,避免盲目增大导致内存浪费。414 收藏