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