面试题:你使用过哪些 Java 并发工具类?

Java 提供了丰富的并发工具类,位于 java.util.concurrent 包中,用于简化多线程编程并提高性能。以下是我使用过的一些常见 Java 并发工具类及其应用场景:


1. ExecutorService 和线程池

  • 作用:用于管理线程池,执行异步任务。
  • 常用实现
    • ThreadPoolExecutor:可自定义核心线程数、最大线程数、队列类型等。
    • ScheduledThreadPoolExecutor:支持定时任务和周期性任务。
    • Executors 工厂类:提供便捷的线程池创建方法,如 newFixedThreadPoolnewCachedThreadPool 等。

2. CountDownLatch

  • 作用:用于等待一组线程完成任务,适用于主线程等待多个子线程完成的场景。
  • 核心方法
    • countDown():减少计数器。
    • await():阻塞直到计数器为 0。

3. CyclicBarrier

  • 作用:用于让一组线程互相等待,达到一个共同的屏障点后再继续执行。
  • 核心方法
    • await():线程到达屏障点并等待其他线程。

4. Semaphore

  • 作用:用于控制同时访问某个资源的线程数量,适用于限流场景。
  • 核心方法
    • acquire():获取许可。
    • release():释放许可。

5. ReentrantLock

  • 作用:可重入锁,提供比 synchronized 更灵活的锁机制,支持公平锁和非公平锁。
  • 核心方法
    • lock():获取锁。
    • unlock():释放锁。
    • tryLock():尝试获取锁,避免阻塞。

6. BlockingQueue

  • 作用:线程安全的队列,支持阻塞操作,常用于生产者-消费者模型。
  • 常用实现
    • ArrayBlockingQueue:基于数组的有界队列。
    • LinkedBlockingQueue:基于链表的可选有界队列。
    • PriorityBlockingQueue:支持优先级的无界队列。

7. Future 和 CompletableFuture

  • 作用:用于异步编程,获取异步任务的结果。
  • Future:表示异步计算的结果,但获取结果时会阻塞。
  • CompletableFuture:支持更强大的异步编程,如链式调用、异常处理等。

8. Phaser

  • 作用:类似于 CyclicBarrier,但支持更灵活的阶段控制,适用于分阶段的任务。
  • 核心方法
    • arrive():到达当前阶段。
    • awaitAdvance(int phase):等待进入下一阶段。

9. StampedLock

  • 作用:提供更高效的读写锁,支持乐观读锁。
  • 核心方法
    • readLock():获取读锁。
    • writeLock():获取写锁。
    • tryOptimisticRead():尝试乐观读锁。

10. Atomic 类

  • 作用:提供原子操作,避免使用锁。
  • 常用类
    • AtomicIntegerAtomicLong:原子更新整型。
    • AtomicReference:原子更新引用类型。

总结:

Java 并发工具类极大地简化了多线程编程的复杂性,提供了高效的线程管理、同步机制和异步任务处理能力。常用的工具类包括:

  • 线程池(ExecutorService
  • 同步工具(CountDownLatchCyclicBarrierSemaphore
  • 锁机制(ReentrantLockStampedLock
  • 并发集合(BlockingQueue
  • 异步编程(FutureCompletableFuture
  • 原子类(AtomicInteger 等)
THE END
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容