Java 提供了丰富的并发工具类,位于 java.util.concurrent
包中,用于简化多线程编程并提高性能。以下是我使用过的一些常见 Java 并发工具类及其应用场景:
1. ExecutorService
和线程池
- 作用:用于管理线程池,执行异步任务。
- 常用实现:
ThreadPoolExecutor
:可自定义核心线程数、最大线程数、队列类型等。ScheduledThreadPoolExecutor
:支持定时任务和周期性任务。Executors
工厂类:提供便捷的线程池创建方法,如newFixedThreadPool
、newCachedThreadPool
等。
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
类
- 作用:提供原子操作,避免使用锁。
- 常用类:
AtomicInteger
、AtomicLong
:原子更新整型。AtomicReference
:原子更新引用类型。
总结:
Java 并发工具类极大地简化了多线程编程的复杂性,提供了高效的线程管理、同步机制和异步任务处理能力。常用的工具类包括:
- 线程池(
ExecutorService
) - 同步工具(
CountDownLatch
、CyclicBarrier
、Semaphore
) - 锁机制(
ReentrantLock
、StampedLock
) - 并发集合(
BlockingQueue
) - 异步编程(
Future
、CompletableFuture
) - 原子类(
AtomicInteger
等)
THE END
暂无评论内容