并发 -- JUC(java.util.concurrent) 包的简单介绍
1️⃣ JUC 包概述
java.util.concurrent
(简称 JUC)是 Java 5 引入的并发工具包,用于解决多线程编程中的复杂问题,主要特点:
提供线程安全的类和工具
提供高性能的并发数据结构
提供线程池和任务调度机制
提供原子操作类和锁机制,替代传统
synchronized
和wait/notify
2️⃣ 核心概念
2.1 锁机制
ReentrantLock
可重入锁,类似
synchronized
,支持公平锁和非公平锁方法:
lock()
/unlock()
tryLock()
lockInterruptibly()
支持 Condition,实现类似
wait/notify
功能ReadWriteLock / ReentrantReadWriteLock
读写锁,支持多读单写
方法:
readLock().lock()
/readLock().unlock()
writeLock().lock()
/writeLock().unlock()
StampedLock
更高性能的锁,支持乐观读锁
2.2 并发集合
ConcurrentHashMap
高性能线程安全哈希表,替代
Hashtable
JDK1.8 后基于 CAS + 链表/红黑树
CopyOnWriteArrayList / CopyOnWriteArraySet
读多写少场景,写操作会复制数组
BlockingQueue(阻塞队列)
常用实现:
ArrayBlockingQueue
(数组队列,有界)
LinkedBlockingQueue
(链表队列,可选界)
PriorityBlockingQueue
(优先级队列)
DelayQueue
(延迟队列)支持阻塞操作:
put()
、take()
2.3 线程池
Executor / ExecutorService
Executor
:执行任务接口
ExecutorService
:可提交任务、管理线程池ThreadPoolExecutor
核心类,线程池底层实现
关键参数:
corePoolSize
、maximumPoolSize
keepAliveTime
BlockingQueue<Runnable>
拒绝策略(AbortPolicy、CallerRunsPolicy 等)
ScheduledThreadPoolExecutor
支持定时/周期性任务
Executors 工具类
创建常用线程池:
newFixedThreadPool(n)
newCachedThreadPool()
newSingleThreadExecutor()
newScheduledThreadPool(n)
2.4 同步辅助类
CountDownLatch
用于等待其他线程完成,倒计时锁存器
CyclicBarrier
用于多个线程相互等待,屏障同步
Semaphore
信号量,控制同时访问资源的线程数量
Exchanger
两个线程交换数据
2.5 原子操作类
AtomicInteger / AtomicLong / AtomicReference
基于 CAS 实现,原子更新变量
方法:
get()
/set()
/incrementAndGet()
/compareAndSet()
2.6 Future & Callable
Callable<V>
可返回结果的任务
Future<V>
表示异步计算结果,可
get()
阻塞获取结果FutureTask<V>
可作为 Runnable 使用,也可作为 Future 获取结果
2.7 LockSupport
提供低级阻塞/唤醒方法
park()
阻塞当前线程
unpark(thread)
唤醒指定线程是 JUC 中很多工具类(如
ConcurrentLinkedQueue
)的底层实现基础
3️⃣ 使用建议
锁:优先使用 JUC 提供的
ReentrantLock
或读写锁,避免手动synchronized
复杂场景。集合:推荐使用
ConcurrentHashMap
、CopyOnWriteArrayList
,而非手动同步HashMap
/ArrayList
。线程池:尽量使用线程池而不是自己创建
Thread
,控制线程数量,减少资源消耗。同步辅助类:合理选择
CountDownLatch
、CyclicBarrier
、Semaphore
等,解决复杂线程协调问题。原子操作:简单计数、状态标记优先考虑
AtomicInteger
等原子类,避免锁。
📌 总结:
JUC 包是 Java 并发编程的核心工具箱,它提供了:
锁机制(可替代 synchronized)
线程池(高效管理线程)
原子操作类(无锁线程安全)
并发集合(线程安全容器)
同步辅助工具(线程协调与控制)
Future/Callable(异步任务管理)