首页
文章列表
标签墙
返回找工具啦
Java
共 83 篇文章
Java LocalDateTime与ZonedDateTime在跨时区计算中的陷阱
2026-06-10 15:39:52
Java LocalDateTime与ZonedDateTime在跨时区计算中的陷阱 在Java 8引入新的日期时间API后,LocalDateTime和ZonedDateTime成为了处理日期时间的主要类。然而,许多开发者在实际开发中,尤其是在处理跨时区业务逻辑时,由于对这两个类的设计理念理解不深
Java
LocalDateTime
ZonedDateTime
32
0
Javaequals被重写后hashCode不同步导致HashMap查询异常
2026-06-08 21:37:24
Java equals 被重写后 hashCode 不同步导致 HashMap 查询异常 当我们将一个自定义对象作为 HashMap 的键(Key)时,如果只重写了 equals 方法,而没有同步重写 hashCode 方法,会导致一个隐蔽且严重的问题:明明是“相同”的对象,却无法从 HashMap
Java
HashMap
equals
33
0
Java的Optional类与空指针异常防御
2026-06-01 10:16:36
Java的Optional类与空指针异常防御 空指针异常(NullPointerException,简称 NPE)是 Java 程序员最熟悉的“老朋友”。当一个方法返回 null,而你没有检查就直接调用它的方法时,这个“朋友”就会不请自来。手动进行 null 检查会让代码变得臃肿、嵌套层级过深,且极
Java
Optional类
空指针异常
42
0
Java StampedLock的乐观读失败后转换为悲观读锁
2026-05-17 23:30:38
Java StampedLock的乐观读失败后转换为悲观读锁 Java 并发包中的 StampedLock 提供了一种乐观读机制,通常比标准的 ReentrantReadWriteLock 更快。它的核心思路是:先试着读数据,如果发现数据正在被修改,再升级为悲观读锁。 核心操作流程 乐观读不会阻塞写
Java
并发编程
乐观读
68
0
Java CompletableFuture.thenCompose与thenApply的链式区别
2026-05-16 08:18:34
Java CompletableFuture.thenCompose与thenCompose的链式区别 在编写异步 Java 代码时,CompletableFuture 是处理多阶段任务的强大工具。许多开发者容易混淆 thenApply 和 thenCompose,导致代码产生不必要的嵌套结构,甚至
Java
异步编程
thenApply
74
0
Java ThreadPoolExecutor的keepAliveTime与核心线程回收
2026-05-16 00:12:25
Java ThreadPoolExecutor的keepAliveTime与核心线程回收 Java线程池 ThreadPoolExecutor 通过控制线程数量来平衡性能与资源消耗。其中,keepAliveTime 参数决定了空闲线程的存活时间,而核心线程的回收机制常常被误解。默认情况下,核心线程即
Java
线程池
核心线程回收
100
0
Java Semaphore信号量实现限流与资源池控制
2026-05-15 18:21:35
Java Semaphore信号量实现限流与资源池控制 Java并发编程中,Semaphore(信号量)是一种核心同步工具,用于控制同时访问特定资源的线程数量。它通过维护一组“许可”,精确限制并发线程数,广泛应用于接口限流、数据库连接池控制等场景。 核心原理解析 Semaphore 的核心逻辑基于“
Java
并发编程
信号量
63
0
Java CompletableFuture组合异步操作的超时处理策略
2026-05-14 18:19:34
Java CompletableFuture组合异步操作的超时处理策略 在异步编程中,单个任务的超时控制相对简单,但多个 CompletableFuture 组合操作(如并行执行、链式调用)的超时处理往往容易失控。若未正确设置超时,系统线程可能被长时间阻塞,导致资源耗尽。 本文将针对三种常见场景,提
Java
异步编程
超时处理
88
0
Java Files.walk递归遍历文件目录树的内存风险
2026-05-11 14:38:44
Java Files.walk递归遍历文件目录树的内存风险 在Java NIO.2中,Files.walk方法提供了一个非常简洁的API来递归遍历文件目录树。然而,对于大型或深度嵌套的目录结构,这个方法隐藏着一个可能导致应用程序耗尽内存的陷阱。本文将深入剖析这个风险,并提供安全的替代方案。 风险解析
Java
Files.walk
内存风险
87
0
Java ScopedValue替代ThreadLocal的虚拟线程友好方案
2026-05-10 19:14:54
Java ScopedValue替代ThreadLocal的虚拟线程友好方案 在Java中,ThreadLocal 曾是线程隔离数据的常用工具,用于存储用户会话、数据库连接等上下文信息。但在虚拟线程时代,它暴露了内存泄漏和继承问题的缺陷。ThreadLocal 的值与线程实例绑定,虚拟线程是轻量级的
Java
虚拟线程
作用域值
77
0
Java Synchronized锁的四种状态与升级降级过程
2026-05-10 06:19:23
Java Synchronized锁的四种状态与升级降级过程 Java中的synchronized关键字用于实现线程同步,其底层通过锁机制保证线程安全。锁的状态会根据竞争情况动态变化,主要分为四种:无锁、偏向锁、轻量级锁、重量级锁。理解这些状态及转换过程,有助于优化程序性能。 一、四种锁状态详解 1
Java
同步锁
四种状态
76
0
Java CAS操作的ABA问题与AtomicStampedReference的解决
2026-05-09 01:16:40
Java CAS操作的ABA问题与AtomicStampedReference的解决 Java中的CAS(CompareAndSwap)是一种无锁算法,用于实现多线程环境下的原子操作。它通过比较内存中的值与预期值,如果相等则更新为新值,否则不做任何操作。这种机制在java.util.concurre
Java
CAS
ABA问题
91
0
Java Thread.sleep与Object.wait的锁释放行为差异
2026-05-06 21:15:51
Java Thread.sleep与Object.wait的锁释放行为差异 Java 多线程编程中,控制线程暂停的两种最常见方式是 Thread.sleep 和 Object.wait。虽然它们都能让线程停止运行,但在锁的释放行为上有着本质的区别。理解这一差异对于避免死锁和提高并发性能至关重要。 1
Java
多线程
并发编程
70
0
Java Thread.interrupt()方法对阻塞IO的局限性
2026-05-06 12:19:00
Java Thread.interrupt方法对阻塞IO的局限性 在 Java 多线程编程中,开发者习惯使用 Thread.interrupt 方法来请求停止线程。对于正在执行计算任务或处于 wait、sleep 状态的线程,该方法通常能立即生效。然而,当线程陷入传统的阻塞 IO(Blocking
Java
多线程
线程中断
81
0
Java线程池ThreadPoolExecutor的饱和策略源码解读
2026-05-05 07:14:09
Java线程池ThreadPoolExecutor的饱和策略源码解读 在使用 ThreadPoolExecutor 时,当线程池的核心线程数已满、任务队列也已满,并且线程数达到最大线程数时,线程池会处于“饱和”状态。此时,新提交的任务将由“饱和策略”进行处理。这四种策略决定了线程池在无法接收新任务时
Java
线程池
饱和策略
67
0
为什么说ArrayList线程不安全?并发修改异常复现与分析
2026-05-05 00:15:34
为什么说ArrayList线程不安全?并发修改异常复现与分析 1. 复现并发修改异常 ArrayList 是 Java 开发中最常用的集合之一,但它并不是线程安全的。当多个线程同时对同一个 ArrayList 实例进行结构性修改(如添加、删除元素)时,很容易引发 java.util.Concurre
ArrayList
线程安全
并发修改异常
81
0
Java Phaser分阶段同步屏障替代CyclicBarrier的优势
2026-05-04 19:26:51
Java Phaser分阶段同步屏障替代CyclicBarrier的优势 Java并发包(J.U.C)中的 Phaser 是一个功能强大的同步工具,它解决了 CyclicBarrier 和 CountDownLatch 在某些复杂场景下的局限性。Phaser 提供了更灵活的线程同步机制,特别是在线程
Java
并发编程
Phaser
69
0
Java HashMap的负载因子为什么是0.75
2026-05-04 16:26:02
Java HashMap的负载因子为什么是0.75 Java 中的 HashMap 是使用最频繁的集合之一,其性能核心在于哈希桶数组与链表/红黑树的配合。在 HashMap 的构造函数中,除了指定初始容量 capacity,还有一个关键参数 loadFactor(负载因子),默认值为 0.75。理解
Java
HashMap
负载因子
76
0
Java Deque双端队列实现栈与队列的最佳实践
2026-05-04 04:16:05
Java Deque双端队列实现栈与队列的最佳实践 Java中的 Deque Double Ended Queue 接口是一种支持在两端插入和删除元素的线性集合。它不仅实现了标准的队列(FIFO)功能,还能完美模拟栈(LIFO)操作。相比于早期的 Stack 类和 Vector,ArrayDeque
Java
数据结构
双端队列
80
0
Java Thread.interrupted()与isInterrupted()的状态清除差异
2026-05-02 23:19:06
Java Thread.interrupted与isInterrupted的状态清除差异 处理 Java 多线程中断时,混淆 Thread.interrupted 和 isInterrupted 会导致线程无法正确停止或逻辑死循环。这两者的核心区别在于对“中断状态”标志位的处理方式:前者会自动清除状
Java
多线程
线程中断
81
0
1
2
3
4
5
下一页