文章列表
什么是可重入锁,如何实现可重入锁?
本文详解可重入锁的概念、实现原理(持有线程标识与重入计数器)及其在Java中的两种实现方式(synchronized与ReentrantLock),并说明如何通过可重入机制避免线程死锁。
什么是 Java 内存模型(JMM)?
本文详细解析Java内存模型(JMM)的核心概念,包括主内存与工作内存的交互、happens-before规则以及如何解决多线程环境下的内存可见性和指令重排序问题,是理解Java并发编程的基础。
什么是 happens-before 原则?
本文详细解析Java内存模型中的happens-before原则,包括其八大核心规则、设计目的及如何保证多线程环境下的内存可见性与有序性,是理解并发编程底层机制的关键。
CountDownLatch、CyclicBarrier、Semaphore 的区别?
本文详细对比CountDownLatch、CyclicBarrier和Semaphore三大并发工具的核心区别、使用场景及实现原理,帮助你根据不同的线程协作需求选择正确的工具。
AQS 是什么?它存在什么问题?
本文深入解析AQS(AbstractQueuedSynchronizer)的核心原理:状态管理、FIFO等待队列及模板方法模式,详解其作为Java并发包基石如何构建ReentrantLock、Semaphore等同步组件。
什么是 CAS?存在什么问题?
本文深入解析CAS(比较并交换)的底层原理、ABA问题及其解决方案,详解高并发场景下的自旋性能开销,是理解无锁编程与Java原子类的核心指南。
父子线程之间如何共享、传递数据?
本文详解父子线程间三种数据共享传递方案:共享变量同步、InheritableThreadLocal上下文传递及任务对象传参,重点分析线程池场景下的陷阱与解决方案,并提供生产环境最佳实践指南。
公平锁和非公平锁的区别?
本文深入解析公平锁与非公平锁的核心区别:公平锁按序排队保证公平性,非公平锁允许插队提升吞吐量。详解ReentrantLock的AQS实现原理、性能对比及实际选型指南。
LongAdder 和 AtomicLong 的区别?
本文深度解析LongAdder与AtomicLong的核心区别,从CAS原理、分段累加设计到性能对比,详解两者在高并发写入、读取一致性及内存开销上的差异,并提供明确的技术选型指南。
synchronized 和 ReentrantLock 的区别是什么?
本文深入对比synchronized与ReentrantLock的核心区别,从使用方式、功能性、底层实现及性能多维度分析,详解何时选择内置隐式锁或灵活显式锁,是Java并发编程的关键决策指南。