一、为什么引入JUC
Java 并发工具包(java.util.concurrent
,简称 JUC)的引入是为了解决多线程编程中的复杂性、性能瓶颈和安全性问题。在原生 Java 线程模型(Thread
、synchronized
、wait/notify
)基础上,JUC 提供了更高效、更灵活的工具,核心解决以下关键问题:
1. 原生同步机制的局限性
synchronized
性能问题:
原生synchronized
是重量级锁,在竞争激烈时会导致线程频繁挂起/唤醒,引发上下文切换开销。JUC 提供了可重入锁(ReentrantLock
),支持:- 非阻塞尝试获取锁(
tryLock()
) - 可中断锁(
lockInterruptibly()
) - 公平锁选项(减少线程饥饿)
- 更细粒度的锁控制(配合
Condition
实现多条件等待)。
- 非阻塞尝试获取锁(
wait/notify
难以维护:
在多条件等待场景