Java Util Concurrent(JUC)提供了一组丰富而强大的类,用于更高级别和更灵活地处理并发操作。以下是一些常用的 JUC 类的概述:
-
ConcurrentHashMap:
- ConcurrentHashMap 是一个高效的线程安全的哈希表实现,用于替代传统的HashTable和Collections.synchronizedMap。它采用了分段锁机制(在 JDK 8 以前)和 CAS 操作(JDK 8 及以后),提高了并发性能。
-
CopyOnWriteArrayList:
- CopyOnWriteArrayList 是一个线程安全的动态数组实现。它通过在写入时创建数组的副本,来避免在读取时进行加锁,从而提高了读取的性能。适用于读多写少的场景。
-
CopyOnWriteArraySet:
- CopyOnWriteArraySet 是基于 CopyOnWriteArrayList 的实现,用于存储不重复的元素。同样具有读多写少的优势。
-
Semaphore(信号量):
- Semaphore 是一个计数信号量,用于控制同时访问的线程个数。通过维护一系列的许可证,可以实现资源访问的限制,例如实现连接池的控制。
-
ReentrantLock(可重入锁):
- ReentrantLock 是显示锁的实现,提供了与 synchronized 相同的并发性和内存语义,同时提供更高的灵活性。支持公平锁和非公平锁,以及一些高级功能,如中断响应、定时锁等。
-
BlockingQueue(阻塞队列):
- BlockingQueue 是一个线程安全的队列,支持在队列的两端进行插入和移除操作。常用于生产者-消费者模型,提供了一种简单而有效的协作方式。
-
CountDownLatch(倒计时门栓):
- CountDownLatch 用于让一个线程等待其他线程各自执行完毕后再执行。通过设置初始计数值,每个线程执行完毕后调用 countDown(),主线程通过 await() 等待计数值减为零。
-
CyclicBarrier(循环屏障):
- CyclicBarrier 用于同步一组线程,让它们在到达某个屏障点时互相等待,然后同时继续执行