Skip to content

Java 有哪些并发工具类?

约 782 字大约 3 分钟

多线程与并发字节

2025-03-20

⭐ 题目日期:

字节 - 2024/12/25

📝 题解:

Java 提供了丰富的并发工具类,主要集中在 java.util.concurrent 包及其子包中。以下是常见的并发工具类及其分类:


1. 同步辅助类

  • CountDownLatch
    允许线程等待一个或多个操作完成。通过计数器实现,计数器归零时等待线程恢复执行。

    • 一次性使用,不可重置。
  • CyclicBarrier
    让一组线程互相等待,直到所有线程到达某个屏障点。支持重复使用。

    • 适用于分阶段任务,如多阶段计算。
  • Semaphore
    控制同时访问资源的线程数量(限流)。

    • 支持公平/非公平模式。
  • Phaser(Java 7+)
    更灵活的屏障,支持动态调整参与的线程数,分阶段同步。

    • 替代 CyclicBarrierCountDownLatch 的复杂场景。
  • Exchanger
    两个线程在屏障点交换数据,适用于生产者-消费者模型。


2. 线程池与执行框架

  • Executor 框架

    • ExecutorService:管理线程池的核心接口。
    • ThreadPoolExecutor:可配置的线程池实现。
    • Executors:工厂类,提供常见线程池(如 newFixedThreadPoolnewCachedThreadPool)。
    • ScheduledExecutorService:支持定时/周期性任务。
  • Fork/Join 框架(Java 7+)

    • ForkJoinPool:分治任务线程池,适用于递归分解任务(如并行计算)。
    • RecursiveTask:带返回值的任务。
    • RecursiveAction:无返回值的任务。

3. 锁与原子操作

  • ReentrantLock
    可重入锁,替代 synchronized,支持公平锁、可中断锁等待。

  • ReadWriteLock
    读写分离锁,通过 ReentrantReadWriteLock 实现,读操作不互斥,提升读多写少场景的性能。

  • StampedLock(Java 8+)
    支持乐观读、悲观读和写锁,适用于读多写少且竞争不激烈的场景。

  • 原子类(java.util.concurrent.atomic

    • AtomicIntegerAtomicLong:原子更新基本类型。
    • AtomicReference:原子更新对象引用。
    • LongAdder(Java 8+):高并发下性能优于 AtomicLong

4. 并发集合

  • ConcurrentHashMap
    线程安全的哈希表,分段锁(Java 7)或 CAS + synchronized(Java 8+)实现。

  • CopyOnWriteArrayList/CopyOnWriteArraySet
    写时复制的集合,读操作无锁,适合读多写少场景。

  • 阻塞队列(BlockingQueue

    • ArrayBlockingQueue:基于数组的有界队列。
    • LinkedBlockingQueue:基于链表的可选有界队列。
    • PriorityBlockingQueue:支持优先级的无界队列。
    • SynchronousQueue:直接传递任务的队列(无缓冲)。

5. 异步与 Future

  • FutureCallable
    表示异步任务的结果,通过 ExecutorService.submit() 提交任务。

  • CompletableFuture(Java 8+)
    支持链式异步编程,可组合多个异步任务(如 thenApplythenCombine)。

  • CompletionService
    解耦任务提交与结果获取,按完成顺序处理结果。


6. 其他工具

  • ThreadLocalRandom(Java 7+)
    多线程下高效的随机数生成器。

  • LockSupport
    底层线程阻塞/唤醒工具(如 park()unpark()),用于构建高级锁。


总结

  • 同步协作CountDownLatchCyclicBarrierPhaser
  • 资源控制SemaphoreReentrantLock
  • 线程池ExecutorServiceForkJoinPool
  • 无锁编程:原子类、StampedLock
  • 异步处理CompletableFutureFuture
  • 并发数据结构ConcurrentHashMapBlockingQueue

根据具体场景选择合适的工具,例如高并发读操作可用 StampedLock,任务分阶段协调用 Phaser,异步任务编排用 CompletableFuture。注意线程安全和避免死锁。