
JUC并发包
文章平均质量分 81
JUC并发包专栏
csdn_tom_168
富贵如可求,虽执鞭之士,吾亦为之。如不可求,从吾所好。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JDK 8 AQS(AbstractQueuedSynchronizer) 源码详解(详细注释版)
本文详细解析了JDK 8中AbstractQueuedSynchronizer(AQS)的源码实现。AQS是Java并发包的核心基础类,通过FIFO等待队列和原子状态管理为锁和同步器提供框架支持。文章分析了AQS的核心数据结构,包括Node内部类(实现CLH队列变体)和关键字段如head、tail节点以及state状态值。重点讲解了addWaiter等核心方法实现,展示了如何通过CAS操作保证线程安全地将节点加入等待队列。AQS支持独占和共享两种资源获取模式,广泛应用于ReentrantLock、Semap原创 2025-07-29 00:13:14 · 440 阅读 · 0 评论 -
JDK 8 CAS(Compare-And-Swap)源码详解(详细注释版)
本文详细解析了JDK 8中CAS(Compare-And-Swap)技术的实现原理。CAS是一种无锁原子操作算法,通过比较内存值与预期值来决定是否更新为新值。Unsafe类提供了底层CAS方法(compareAndSwapInt/Long/Object等),这些方法直接调用CPU指令实现原子性。以AtomicInteger为例,展示了CAS的实际应用,通过循环CAS操作实现原子递增、设置值等操作。文章包含详细源码注释,解释了如何通过偏移量访问对象字段,以及volatile访问与有序写入的区别,为理解Java原创 2025-07-29 00:12:59 · 484 阅读 · 0 评论 -
JDK 8 FutureTask源码详解(详细注释版)
本文详细解析了JDK8中FutureTask的核心源码实现。FutureTask是Java并发编程中重要的工具类,实现了RunnableFuture接口,可以包装Callable或Runnable对象。源码分析重点包括: 内部状态机制:使用7种状态(NEW、COMPLETING、NORMAL等)和状态转换来管理任务生命周期 核心数据结构:包含底层任务对象、执行结果/异常、执行线程引用和等待线程栈 关键方法实现: cancel()方法处理任务取消逻辑 get()方法实现阻塞等待结果 report()方法处理结原创 2025-07-29 00:12:12 · 160 阅读 · 0 评论 -
JDK 8 Future源码详解(详细注释版)
本文详细解析了JDK8中Future接口和FutureTask实现类的核心源码。Future接口定义了异步计算结果的管理机制,提供了取消任务、检查状态和获取结果的方法。FutureTask作为核心实现类,通过7种状态(NEW、COMPLETING等)管理任务生命周期,内部维护Callable/Runnable任务、执行线程和等待队列。其关键特性包括:线程安全的任务取消机制、多线程等待结果处理、异常结果封装等。源码分析展示了Java并发编程中异步任务结果处理的底层实现原理。原创 2025-07-29 00:11:57 · 309 阅读 · 0 评论 -
JDK 8 ForkJoinPool源码详解(详细注释版)
本文详细解析了JDK 8中ForkJoinPool的源码实现。ForkJoinPool是Java 7引入的并行执行框架核心类,采用工作窃取算法(Work-Stealing)来执行ForkJoinTask任务。文章重点分析了线程池控制状态、工作队列数组等核心数据结构,以及默认并行级别(通常等于CPU核心数)等关键配置参数。源码注释详细说明了状态标志位、线程工厂、异常处理器等组件的作用,并展示了工作队列(WorkQueue)的内部实现,包括任务存储数组、锁机制和窃取计数器等核心机制。通过静态初始化块和Unsaf原创 2025-07-29 00:11:42 · 351 阅读 · 0 评论 -
JDK 8 ScheduledExecutorService源码详解(详细注释版)
本文详细解析了JDK 8中ScheduledExecutorService的源码实现,主要包括三部分内容:1) ScheduledExecutorService接口定义,提供了延迟执行和周期性执行任务的核心方法;2) ScheduledFuture接口,继承Delayed和Future接口,用于表示延迟任务结果;3) ScheduledThreadPoolExecutor核心实现类,通过内部类ScheduledFutureTask封装任务,支持定时任务调度功能。源码注释详细说明了各类和方法的用途、参数约束及原创 2025-07-29 00:11:26 · 333 阅读 · 0 评论 -
JDK 8 ThreadPoolExecutor源码详解(详细注释版)
本文详细解析了JDK8中ThreadPoolExecutor的核心源码,重点包括以下内容: ThreadPoolExecutor使用原子整数ctl同时记录线程池状态(高3位)和工作线程数(低29位),定义了5种线程池状态(RUNNING、SHUTDOWN、STOP、TIDYING、TERMINATED)。 核心线程池参数包括:核心线程数(corePoolSize)、最大线程数(maximumPoolSize)、空闲线程存活时间(keepAliveTime)以及是否允许核心线程超时(allowCoreThre原创 2025-07-29 00:11:09 · 196 阅读 · 0 评论 -
JDK 8 ExecutorService源码详解(详细注释版)
本文详细解析了JDK 8中ExecutorService接口及其抽象实现AbstractExecutorService的核心源码。ExecutorService扩展了Executor接口,提供了线程池生命周期管理(shutdown/shutdownNow)和任务执行控制(submit/invokeAll/invokeAny)等方法。AbstractExecutorService则实现了这些方法的默认逻辑,包括将Callable任务包装为RunnableFuture对象等核心功能。注释详细说明了每个方法的作用原创 2025-07-29 00:10:51 · 172 阅读 · 0 评论 -
JDK 8 Executor源码详解
JDK 8 Executor框架源码分析摘要: Executor框架提供了线程池管理的核心接口,包括Executor、ExecutorService和AbstractExecutorService。Executor接口定义了基本的任务提交方法execute(),实现任务提交与执行的解耦。ExecutorService扩展了Executor,增加了线程池生命周期管理、批量任务提交和异步结果获取等功能,提供shutdown()、submit()、invokeAll()等方法。AbstractExecutorSe原创 2025-07-29 00:10:27 · 291 阅读 · 0 评论 -
JDK 8 Phaser 源码详解(详细注释版)
本文详细解析了JDK 8中Phaser同步工具的源码实现。Phaser是一个可重用的同步屏障,支持动态注册/注销参与者,提供分层同步机制。其核心设计包括:1) 使用long类型state字段高效管理阶段号(phase)和参与者(party)信息;2) 提供灵活的构造方法,支持指定父Phaser和初始参与者数量;3) 采用位运算和CAS操作实现无锁化同步。Phaser适用于分阶段并行计算、复杂工作流协调等场景,特别适合需要重用屏障和动态管理参与者的同步需求。源码中通过精心设计的掩码和位操作实现了高效的状态管理原创 2025-07-29 00:10:12 · 254 阅读 · 0 评论 -
JDK 8 Exchanger 源码详解(详细注释版)
本文详细解析了JDK 8中Exchanger类的实现原理。Exchanger提供了线程间双向数据交换的功能,采用无锁设计实现高并发。核心设计包括:1)对称数据交换机制,支持阻塞和超时等待;2)使用CAS操作实现无锁化;3)通过ThreadLocal和槽位数组减少竞争;4)优化的内存布局和等待机制。关键实现包括Node节点类存储交换信息,arena槽位数组提高并发性能,以及核心exchange方法实现数据交换逻辑。该方法支持无限期等待、可中断等待和超时等待三种模式,适用于生产者-消费者等各种线程间数据交换场景原创 2025-07-29 00:09:55 · 347 阅读 · 0 评论 -
JDK 8 Semaphore 源码详解(详细注释版)
本文详细解析了JDK8中Semaphore的源码实现,重点分析了其核心同步器Sync类及其公平/非公平子类。Sync基于AQS框架,使用state字段表示可用许可数,通过CAS操作实现线程安全的许可获取和释放。非公平版本允许插队提高性能但可能导致饥饿,而公平版本则严格遵循FIFO顺序。文章还详细介绍了许可的动态调整、全部获取等特殊操作,并标注了时间复杂度、线程安全性和典型应用场景。原创 2025-07-29 00:09:40 · 259 阅读 · 0 评论 -
JDK 8 CyclicBarrier 源码详解(详细注释版)
本文详细解析了JDK 8中CyclicBarrier的源码实现。CyclicBarrier通过ReentrantLock和Condition提供线程同步机制,支持多线程在特定屏障点等待。核心设计包括:1) 使用parties参数指定参与线程数;2) 通过count变量跟踪等待线程数;3) Generation类管理屏障周期状态;4) 可选barrierCommand回调在屏障突破时执行。await()方法实现线程等待逻辑,支持超时机制和异常处理。CyclicBarrier相比CountDownLatch具有原创 2025-07-29 00:08:41 · 398 阅读 · 0 评论 -
JDK 8 CountDownLatch 源码详解(详细注释版)
摘要:本文详细解析了JDK8中CountDownLatch的源码实现。CountDownLatch基于AQS框架,通过Sync内部类实现同步控制,使用state字段表示计数器值。核心方法包括await()阻塞等待计数器归零,countDown()减少计数器值并可能唤醒等待线程,以及带超时的await()方法。源码通过CAS操作保证线程安全,利用共享锁机制实现多线程同步,设计精巧高效。原创 2025-07-29 00:07:36 · 248 阅读 · 0 评论 -
JDK 8 AtomicStampedReference 源码详解(详细注释版)
本文详细解析了JDK8中AtomicStampedReference的源码实现。该类通过内部Pair<V>类封装引用值和版本戳,利用Unsafe类提供的CAS操作实现原子性更新,有效解决了并发环境下的ABA问题。核心方法包括: 构造方法初始化引用值和版本戳 getReference()和getStamp()获取当前值 get(int[])原子性获取引用和版本戳 核心CAS操作compareAndSet()实现原子条件更新 设计亮点在于将引用和版本戳封装为一个对象整体更新,通过版本戳区分相同值的不原创 2025-07-29 00:07:10 · 385 阅读 · 0 评论 -
JDK 8 AtomicLongArray 源码详解(详细注释版)
摘要: JDK8 AtomicLongArray源码详解解析了该线程安全数组类的实现机制。核心是通过Unsafe类实现CAS原子操作,底层使用volatile修饰的long数组保证可见性。关键特性包括:1) 使用arrayBaseOffset和arrayIndexScale计算元素内存地址;2) 提供原子性getAndSet、compareAndSet等操作;3) 实现无锁并发控制。代码注释详细解释了内存布局、偏移量计算、线程安全保证等实现细节,特别强调了CAS操作在并发环境下的应用及其ABA问题。原创 2025-07-28 00:27:54 · 584 阅读 · 0 评论 -
JDK 8 AtomicIntegerArray 源码详解(详细注释版)
本文详细解析了JDK8中AtomicIntegerArray类的源码实现。该类提供了线程安全的原子操作数组功能,通过Unsafe类实现底层CAS操作确保原子性。核心特性包括:1) 使用volatile数组保证内存可见性;2) 通过偏移量计算快速定位数组元素地址;3) 提供原子性get/set、CAS、递增/递减等操作。实现上采用无锁机制,通过Unsafe类的compareAndSwapInt等方法实现高效并发控制,相比同步锁有更好的性能表现。原创 2025-07-28 00:27:39 · 399 阅读 · 0 评论 -
JDK 8 AtomicBoolean 源码详解(详细注释版)
本文详细解析了JDK8中AtomicBoolean类的源码实现。AtomicBoolean通过Unsafe类提供的CAS操作保证原子性,内部使用volatile int存储布尔值(1为true,0为false)。关键点包括:1)使用valueOffset字段偏移量实现内存地址直接操作;2)提供get/set方法进行基本读写;3)通过compareAndSet实现原子性条件更新;4)getAndSet方法保证获取旧值并设置新值的原子性;5)weakCompareAndSet提供弱内存语义的CAS操作。由于bo原创 2025-07-28 00:27:23 · 345 阅读 · 0 评论 -
JDK 8 AtomicLong 源码详解(详细注释版)
本文详细解析了JDK 8中AtomicLong类的源码实现,重点分析了其原子操作原理。AtomicLong通过Unsafe类提供的CAS(Compare-And-Swap)操作实现线程安全的原子更新,核心字段value使用volatile保证内存可见性。文章详细注释了类定义、构造方法、基本get/set操作,以及关键的原子更新方法如compareAndSet、getAndIncrement等,揭示了其底层通过CAS自旋实现无锁并发控制的机制,并解释了valueOffset等关键字段的作用。这些原子操作在并发原创 2025-07-28 00:27:08 · 292 阅读 · 0 评论 -
JDK 8 AtomicInteger 源码详解(详细注释版)
本文详细解析了JDK 8中AtomicInteger类的源码实现。AtomicInteger通过Unsafe类提供的底层CAS操作实现原子性,关键字段value使用volatile保证可见性。类中定义了获取/设置值的原子方法,包括getAndSet、compareAndSet等核心操作,以及自增/自减等常用方法。特别分析了CAS操作的实现原理和注意事项,如ABA问题、内存排序保证等。所有原子操作都基于valueOffset内存偏移量,通过Unsafe直接操作内存实现高性能无锁并发。原创 2025-07-28 00:26:53 · 345 阅读 · 0 评论 -
JDK 8 Condition 源码详解(详细注释版)
本文将深入解析JDK8中Condition接口的实现类ConditionObject的源码。内容涵盖类定义、基本属性和核心等待方法的详细注释,包括awaitUninterruptibly()、await()和带超时的await()方法。详细分析了等待过程的四个关键步骤:释放锁、加入等待队列、阻塞线程以及重新获取锁,并解释了中断处理机制。对于带超时的方法,还说明了超时返回条件和时间单位转换逻辑。所有方法都要求调用前必须持有锁,否则会抛出IllegalMonitorStateException异常。通过源码注释原创 2025-07-28 00:26:37 · 431 阅读 · 0 评论 -
JDK 8 StampedLock 源码详解(详细注释版)
本文详细解析了JDK8中StampedLock的源码实现。StampedLock是一种改进的读写锁,支持乐观读、悲观读和写锁三种模式。文章从类定义和基本属性开始,详细介绍了锁的状态字段结构设计、等待队列实现以及核心方法实现原理。重点分析了tryWriteLock()和writeLock()等关键方法的实现逻辑,包括CAS操作、自旋等待策略和线程阻塞机制。通过源码注释,深入剖析了StampedLock如何高效处理多线程并发访问,特别是其独特的乐观读锁机制如何减少锁争用。原创 2025-07-28 00:26:11 · 585 阅读 · 0 评论 -
JDK 8 ReentrantReadWriteLock 源码详解(详细注释版)
本文详细分析了JDK8中ReentrantReadWriteLock的源码实现。该读写锁基于AQS框架,采用状态字段高16位记录读锁计数、低16位记录写锁计数的设计,支持公平与非公平两种模式。核心组件包括读锁ReadLock和写锁WriteLock,通过Sync同步器管理锁状态。读锁使用ThreadLocal存储每个线程的重入计数,写锁支持可重入性。源码注释详细解释了状态分割设计、锁获取与释放逻辑、线程安全保证等关键实现细节。原创 2025-07-28 00:25:57 · 423 阅读 · 0 评论 -
JDK 8 ReentrantLock 源码详解(详细注释版)
本文详细解析了JDK 8中ReentrantLock的源码实现。ReentrantLock通过内部Sync类(继承自AQS)实现锁机制,支持公平和非公平两种模式。核心方法包括:nonfairTryAcquire()使用CAS操作获取锁并支持重入;tryRelease()递减state并检查是否完全释放锁。非公平锁(NonfairSync)允许插队提高性能,而公平锁(FairSync)保证获取顺序。关键点包括:state变量记录锁状态、exclusiveOwnerThread标识持有线程、以及条件变量支持等。原创 2025-07-28 00:25:42 · 540 阅读 · 0 评论 -
JDK 8 ConcurrentSkipListSet 源码详解(详细注释版)
本文详细分析了JDK 8中ConcurrentSkipListSet的实现原理和核心方法。该线程安全的有序集合基于ConcurrentSkipListMap实现,利用跳表数据结构提供O(log n)时间复杂度的操作性能。文章从类定义、构造方法入手,深入讲解了添加、删除、查找等核心集合操作的实现细节,并分析了迭代器特性、子集操作等高级功能。特别强调了其线程安全特性、弱一致性和有序性特点,为开发者理解和使用这一并发集合提供了全面的技术参考。原创 2025-07-28 00:25:16 · 248 阅读 · 0 评论 -
JDK 8 ConcurrentSkipListMap 源码详解(详细注释版)
本文详细解析了JDK 8中ConcurrentSkipListMap的源码实现。ConcurrentSkipListMap是一个基于跳表实现的并发有序映射表,采用CAS操作保证线程安全。文章分析了其核心数据结构,包括Node类(存储键值对的基本单元)和Index类(构建跳表多层索引)。重点介绍了跳表的增删改查实现机制,包括随机层级生成、CAS原子操作、节点删除标记等关键技术。源码注释详细说明了每个方法的用途和实现逻辑,为理解并发跳表的工作机制提供了深入参考。原创 2025-07-28 00:25:00 · 296 阅读 · 0 评论 -
JDK 8 LinkedBlockingQueue 源码详解(详细注释版)
摘要: LinkedBlockingQueue是JDK8中基于链表实现的高效阻塞队列,采用生产者-消费者锁分离设计提升并发性能。其核心特性包括: 可选有界/无界模式(默认Integer.MAX_VALUE) 使用两个ReentrantLock分别控制入队和出队操作 通过AtomicInteger原子计数保证线程安全 提供阻塞/非阻塞两种插入方式(offer/put)和取出方式(poll/take) 内部采用单向链表结构,包含哨兵节点简化操作 条件变量notEmpty和notFull实现高效等待通知机制 不允原创 2025-07-28 00:24:32 · 263 阅读 · 0 评论 -
JDK 8 ArrayBlockingQueue 源码详解(详细注释版)
有界阻塞队列固定容量,不能动态扩容当队列满时阻塞生产者当队列空时阻塞消费者循环数组实现使用数组存储元素通过索引循环使用数组空间takeIndex和putIndex管理队首队尾锁分离机制单个ReentrantLock保护所有操作两个Condition分别处理空和满状态支持公平和非公平锁选择多种阻塞策略put()/take():无限期阻塞offer()/poll():超时阻塞offer()/poll():非阻塞操作线程安全所有操作都通过锁保护保证原子性和可见性。原创 2025-07-28 00:24:16 · 251 阅读 · 0 评论 -
JDK 8 CopyOnWriteArrayList 源码详解(详细注释版)
本文详细解析了JDK8中CopyOnWriteArrayList的源码实现。该类采用写时复制机制实现线程安全,读操作无锁且高效,写操作通过ReentrantLock保证线程安全。核心特性包括:volatile数组引用保证可见性,写操作创建新数组避免并发修改,读操作直接访问数组元素。主要方法包括无锁的get()、size()、contains()等读操作,以及加锁的add()、set()、remove()等写操作。该实现适用于读多写少的并发场景,保证弱一致性而非强一致性。原创 2025-07-28 00:23:31 · 275 阅读 · 0 评论 -
JDK 8 ConcurrentHashMap 源码详解(详细注释版)
本文深入解析了JDK 8中ConcurrentHashMap的关键源码实现。摘要如下: ConcurrentHashMap采用分段锁+CAS的高效并发设计,相比JDK7有重大改进 核心数据结构包括Node数组、nextTable扩容数组和sizeCtl控制字段 关键参数包含默认容量16、负载因子0.75、树化阈值8和反树化阈值6 采用多线程协作扩容机制,通过transferIndex控制扩容进度 节点设计包含基本Node类和红黑树节点,使用volatile保证可见性 计数器采用分散式设计(baseCount原创 2025-07-28 00:23:10 · 383 阅读 · 0 评论 -
JUC并发包 速览
摘要:Java 并发包(JUC)是 JDK 1.5 引入的高性能并发编程工具集,提供比传统 synchronized 更灵活的线程安全解决方案。其核心组件包括:1) 锁机制(ReentrantLock、读写锁、乐观锁),支持可中断、超时和公平锁;2) 原子类(如 AtomicInteger),基于 CAS 实现无锁线程安全操作;3) 并发集合(ConcurrentHashMap、CopyOnWriteArrayList),采用分段锁和写时复制优化性能。JUC 通过分离状态与同步逻辑,降低了并发复杂度,适用于原创 2025-07-12 00:17:45 · 590 阅读 · 0 评论 -
JUC Condition 详解及常用代码展示
JUC Condition 是 Java 并发包中用于线程协调的重要接口,必须与 Lock 配合使用。它提供了比传统 wait/notify 更强大的功能,包括多条件队列、精确唤醒、超时机制和中断响应。核心方法有 await()、signal() 等,实现基于 AQS 的条件队列机制。典型应用场景包括生产者-消费者模型和多条件精确唤醒,通过示例代码展示了如何创建多个 Condition 并实现线程间的精确通知机制。Condition 为复杂线程同步问题提供了更灵活高效的解决方案。原创 2025-07-11 00:06:59 · 818 阅读 · 0 评论 -
ReentrantReadWriteLock
摘要:ReentrantReadWriteLock是Java并发包中的读写锁实现,采用状态分割技术(32位int高16位记录读锁,低16位记录写锁),支持可重入性和公平性选择。其核心设计包括:读写分离机制(读锁共享/写锁独占)、锁降级功能(写锁转为读锁)、以及通过ThreadLocal记录读锁重入次数。源码分析展示了写锁获取(非公平锁直接尝试CAS)、读锁获取(处理首次获取和重入场景)以及锁降级的关键实现流程。该锁通过优化数据结构(如CLH队列和读锁计数缓存)提升并发性能。原创 2025-07-11 00:06:44 · 549 阅读 · 0 评论 -
StampedLock 详解及源码分析
StampedLock是Java 8引入的高性能读写锁,提供三种访问模式:写锁(独占)、悲观读锁(共享)和乐观读(无锁验证)。其核心设计采用64位状态表示,支持锁转换和避免写线程饥饿。源码分析显示,通过CAS操作和CLH队列实现高效并发控制,乐观读通过版本戳验证数据一致性。最佳实践包括乐观读模板:先无锁获取数据,验证失败时升级为悲观读锁。相比ReentrantReadWriteLock,StampedLock在读多写少场景性能提升显著。原创 2025-07-11 00:06:30 · 1013 阅读 · 0 评论 -
LockSupport 详解及源码分析
LockSupport是Java并发包中的核心工具类,提供线程阻塞(park)和唤醒(unpark)能力。相比wait/notify机制,它无需同步块、支持精准线程控制、具有许可机制(先唤醒后阻塞不卡死)和更好的中断处理。其核心是通过二元许可(0/1)控制线程状态,park消耗许可,unpark设置许可。底层使用Unsafe类实现,最终通过操作系统原语(如Linux的futex)挂起/唤醒线程。LockSupport是构建高级同步器的基础,具有更灵活、更可靠的线程控制能力。原创 2025-07-11 00:06:07 · 1094 阅读 · 0 评论 -
synchronized 详解 (Java 并发编程核心)
摘要: synchronized是Java实现线程安全的核心机制,通过内置锁(Monitor)保证共享资源的互斥访问。作用范围包括同步实例方法(锁为当前对象)、同步静态方法(锁为Class对象)及同步代码块(需指定锁对象)。其特性包含互斥性、可重入性及内存可见性。JVM底层通过monitorenter/monitorexit指令实现,并优化为偏向锁、轻量级锁和重量级锁。使用时需注意性能开销、死锁风险及锁粒度控制,建议最小化临界区、谨慎选择锁对象(避免使用String或包装类)并优先使用同步代码块。复杂场景可原创 2025-07-10 11:57:31 · 798 阅读 · 0 评论 -
CopyOnWriteArrayList 深度解析
CopyOnWriteArrayList是Java中基于写时复制机制的并发集合,核心思想是通过读写分离实现无锁读取。写操作加锁复制新数组后替换引用,确保线程安全但性能较低(O(n)复杂度)。适用于读多写少场景(如事件监听器),但不适合高频写入或大型集合。关键特性包括弱一致性迭代器和volatile可见性,需注意内存消耗和批量操作优化。相比其他并发容器,它在读性能上最优但写性能最差。Java版本演进中持续优化了复制和锁机制。设计哲学体现了空间换时间和读写分离思想,在特定场景下能提供极致无锁读性能。原创 2025-07-10 11:56:10 · 337 阅读 · 0 评论 -
JUC 锁类详解:Java 并发编程的核心锁机制
Java并发工具包(JUC)提供了强大的锁机制,包括ReentrantLock、ReadWriteLock、StampedLock等核心锁类,相比synchronized具有更灵活的并发控制能力。ReentrantLock支持可重入和公平性选择;ReadWriteLock实现读写分离;StampedLock提供乐观读模式提升性能;Condition实现线程间协调。JUC锁底层基于AQS框架,通过状态变量和等待队列管理锁状态。最佳实践包括最小化锁范围、避免嵌套锁和使用tryLock防止死锁。不同锁类型适用于不原创 2025-07-10 11:55:44 · 884 阅读 · 0 评论 -
InheritableThreadLocal 详解
本文详细解析了Java中的InheritableThreadLocal,它是ThreadLocal的子类,允许子线程继承父线程的本地变量值。文章介绍了其核心概念、实现原理(通过inheritableThreadLocals字段实现浅拷贝)、使用场景(如上下文传递、资源共享)及注意事项(线程池局限性、内存泄漏风险等)。通过代码示例展示了基本用法和自定义childValue方法,并与普通ThreadLocal进行对比。最后提到线程池环境下可使用阿里开源的TransmittableThreadLocal作为增强方原创 2025-06-25 00:09:44 · 958 阅读 · 0 评论 -
双端队列(Deque)在ForkJoinPool 的工作窃取算法应用
ForkJoinPool通过双端队列实现高效负载均衡:线程自身采用LIFO策略从队列尾部取任务执行(缓存友好,减少竞争),而空闲线程用FIFO策略从其他队列头部窃取任务(负载均衡)。这种LIFO+FIFO的组合设计分离了生产者和窃取者的操作端,降低了锁冲突,特别适合处理分治算法。双端队列内部通过CAS实现无锁操作,优化了并行性能,相比传统线程池更适合递归任务处理。原创 2025-06-25 00:04:58 · 996 阅读 · 0 评论