-
本文详解为何“多线程顺序执行”是反模式,阐明应使用单线程串行调度(如HandlerThread、ExecutorService单线程池)替代混乱的多线程嵌套,并提供安全更新RecyclerView的最佳实践。103 收藏 -
多数业务应优先用shutdown(),它拒绝新任务但等待已有任务完成;shutdownNow()强制中断运行中线程并返回未执行任务,仅适用于超时不可接受的场景。177 收藏 -
fail-fast的核心是检测集合结构被意外修改而非并发;ArrayList的modCount在结构性修改时自增,迭代器构造时复制为expectedModCount,next()/hasNext()前比对二者,不等则抛ConcurrentModificationException。476 收藏 -
静态方法不能直接访问非静态成员变量,因其属于类而非对象实例,且静态方法在类加载时即可调用,而实例变量需对象创建后才存在;静态方法无this引用,无法定位具体实例。477 收藏 -
ReentrantReadWriteLock通过读写锁分离提升高读低写性能:读锁共享可重入,写锁独占可重入,读写互斥但读读不互斥;支持写锁降级为读锁,禁止读锁升级;适用于缓存等场景。378 收藏 -
Stream.distinct()不保证顺序,仅在有序流中保留首次出现元素;并行流下顺序失控,需用LinkedHashSet手动去重或Collectors.toMap按字段去重。234 收藏 -
subList返回原List的实时视图而非副本,其add/remove会直接修改原列表结构并引发索引位移,遍历时修改易抛ConcurrentModificationException或IndexOutOfBoundsException。403 收藏 -
本文详解如何在Android中实现一个严格对齐“每5分钟整点”(如02:35、02:40、02:45)启动的倒计时器,支持动态计算距下一个5分钟刻度的等待时长,并自动执行5分钟倒计时任务。346 收藏 -
DateTimeFormatter.parse()抛DateTimeParseException主因是格式模式与输入字符串严格不匹配;LocalDateTime.format()不输出时区因类型本身无时区;转Instant需先转LocalDateTime再指定时区;YYYY为周基年,yyyy为日历年,跨年场景易出错。444 收藏 -
Java中易致内存泄漏的引用类型包括强引用(未置null或超作用域)、弱引用误用(如WeakHashMap中key未重写equals/hashCode)、静态集合滥用、内部类隐式引用、ThreadLocal未remove等。114 收藏 -
SpringBoot默认能将JSON数组正确绑定到DTO的List字段,常见失败原因是JSON字段名与Java属性名不匹配,尤其是驼峰命名规则(如kPartIds→kpartIds)导致Jackson无法识别。195 收藏 -
Java引用类型指类、接口、数组等非基本类型,变量存储对象地址而非数据本身;分为强、软、弱、虚四种,强度递减,影响GC回收策略,用于缓存、防内存泄漏、资源清理等场景。374 收藏 -
Stack类是Vector的子类,实现LIFO栈结构,提供push、pop、peek、empty和search方法;尽管其线程安全,但现代Java推荐使用ArrayDeque替代以获得更好性能。233 收藏 -
long字面量必须加L/l后缀以避免溢出和类型误判:整数字面量默认为int,超范围需显式标注;推荐大写L防混淆;各进制超int值均须加L。201 收藏 -
Java数组赋值有静态初始化、动态初始化、数组间引用赋值及工具类赋值四种方式:静态初始化直接指定元素并推断长度;动态初始化先定长再逐个赋值,默认值自动填充;数组间赋值为引用传递,需用Arrays.copyOf()等复制副本;Arrays.fill()可批量设相同值。257 收藏