JUC 是 `java.util.concurrent` 包的简称,是 Java 官方提供的用于简化并发编程的工具包。它从 Java 5 开始引入,随后在 Java 7、8 等版本中持续增强,旨在帮助开发者更容易地编写正确、高性能的多线程程序。 ### 主要包含的组件: 1. **原子类(Atomic Variables)** 如 `AtomicInteger`、`AtomicLong`、`AtomicReference` 等。利用 CAS(Compare-And-Swap)机制提供线程安全的原子操作,避免了使用重量级锁。 2. **锁(Locks)** 如 `ReentrantLock`、`ReentrantReadWriteLock`、`StampedLock`。相比 `synchronized`,它们提供更灵活的锁获取与释放方式(如可中断、尝试加锁、超时等),并且支持公平锁、条件变量等。 3. **线程池(Executors & Thread Pools)** 包括 `ThreadPoolExecutor`、`ScheduledThreadPoolExecutor` 以及 `Executors` 工厂类。通过复用线程来降低频繁创建/销毁线程的开销,并提供任务队列、拒绝策略等管理能力。 4. **并发集合(Concurrent Collections)** 如 `ConcurrentHashMap`、`CopyOnWriteArrayList`、`BlockingQueue`(`ArrayBlockingQueue`、`LinkedBlockingQueue` 等)。这些集合内部实现了高效的线程同步,避免了外部手动加锁。 5. **同步工具(Synchronizers)** 如 `CountDownLatch`(等待一组线程完成)、`CyclicBarrier`(循环屏障,让多个线程互相等待)、`Semaphore`(信号量,控制并发数量)、`Exchanger`(两个线程交换数据)等。用于协调多个线程之间的协作。 6. **Fork/Join 框架** 用于递归分解大任务,利用工作窃取(work-stealing)算法提高并行计算效率。`ForkJoinPool` 是其核心实现。 ### 为什么需要 JUC? - 传统的 `synchronized`、`wait/notify` 等低层机制使用复杂,容易出错(死锁、性能差等)。 - JUC 提供了经过充分测试、高性能的并发组件,开发者只需关注业务逻辑,无需重复造轮子。 - 极大地提升了高并发场景下的开发效率和程序稳定性。 简单说:**JUC 是 Java 并发编程的“武器库”,让你安全、高效地编写多线程代码。**