面试题:简述常用的 Java 并发工具类有哪些 ?

Java 提供了丰富的并发工具类,位于 java.util.concurrent 包中,用于简化多线程编程并提高性能。以下是常用的并发工具类及其用途:

1. 线程池相关

  • ExecutorService
    • 用于管理线程池,支持提交任务并返回 Future 对象。
    • 常用实现类:ThreadPoolExecutorScheduledThreadPoolExecutor
  • Executors
    • 工厂类,用于创建不同类型的线程池。
    • 常用方法:
      • newFixedThreadPool(int nThreads):固定大小的线程池。
      • newCachedThreadPool():可缓存的线程池。
      • newSingleThreadExecutor():单线程的线程池。
      • newScheduledThreadPool(int corePoolSize):支持定时任务的线程池。

2. 同步工具

  • CountDownLatch
    • 允许一个或多个线程等待其他线程完成操作。
    • 使用场景:主线程等待多个子线程完成任务。
  • CyclicBarrier
    • 让一组线程相互等待,达到屏障点时继续执行。
    • 使用场景:多线程分阶段任务。
  • Semaphore
    • 控制同时访问资源的线程数量。
    • 使用场景:限流、资源池管理。
  • Phaser
    • 更灵活的同步工具,支持分阶段的任务协调。
    • 使用场景:复杂的多线程任务协调。

3. 线程安全的集合

  • ConcurrentHashMap
    • 线程安全的哈希表,性能优于 Hashtable
  • CopyOnWriteArrayList
    • 线程安全的列表,适合读多写少的场景。
  • BlockingQueue
    • 线程安全的队列,支持阻塞操作。
    • 常用实现类:
      • ArrayBlockingQueue:基于数组的有界队列。
      • LinkedBlockingQueue:基于链表的可选有界队列。
      • PriorityBlockingQueue:支持优先级的无界队列。
      • SynchronousQueue:不存储元素的队列,用于直接传递任务。

4. 原子变量

  • AtomicIntegerAtomicLongAtomicBoolean
    • 提供原子操作的整型、长整型和布尔型变量。
  • AtomicReference
    • 提供原子操作的对象引用。
  • AtomicStampedReference
    • 解决 ABA 问题的原子引用。

5. 锁相关

  • ReentrantLock
    • 可重入锁,比 synchronized 更灵活,支持公平锁和非公平锁。
  • ReentrantReadWriteLock
    • 读写锁,支持读操作并发,写操作独占。
  • StampedLock
    • 更高效的读写锁,支持乐观读。

6. Future 和 CompletableFuture

  • Future
    • 表示异步计算的结果,支持获取计算结果或取消任务。
  • CompletableFuture
    • 更强大的异步编程工具,支持链式调用和组合多个异步任务。

示例代码

// 使用 CountDownLatch
CountDownLatch latch = new CountDownLatch(3);
for (int i = 0; i < 3; i++) {
    new Thread(() -> {
        System.out.println("Task completed");
        latch.countDown();
    }).start();
}
latch.await(); // 等待所有任务完成

// 使用 ConcurrentHashMap
ConcurrentHashMap<String, Integer> map = new ConcurrentHashMap<>();
map.put("key", 1);

// 使用 CompletableFuture
CompletableFuture.supplyAsync(() -> "Hello")
                .thenApplyAsync(s -> s + " World")
                .thenAccept(System.out::println);

总结

Java 并发工具类提供了强大的多线程编程支持,涵盖了线程池管理、同步控制、线程安全集合、原子操作、锁机制以及异步任务处理等方面。合理使用这些工具类可以显著提高程序的并发性能和可靠性。

THE END
点赞6 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容