原子类(java.util.concurrent.atomic)
原子类通过CAS(Compare-And-Swap)机制实现线程安全的操作,适用于高并发场景。
- AtomicInteger:原子性操作的Integer。
- AtomicLong:原子性操作的Long。
- AtomicBoolean:原子性操作的Boolean。
- AtomicReference<V>:原子性操作的对象引用。
- AtomicIntegerArray:原子性操作的整型数组。
- AtomicLongArray:原子性操作的长整型数组。
- AtomicReferenceArray<E>:原子性操作的引用数组。
- LongAdder:高并发下比AtomicLong性能更好的累加器。
- LongAccumulator:更通用的累加器。
示例代码:
java
AtomicInteger count = new AtomicInteger(0);
count.incrementAndGet();
并发集合(java.util.concurrent)
并发集合类通过分段锁或CAS实现高性能的并发操作。
-
ConcurrentHashMap:分段锁或CAS实现的高性能并发HashMap,完全支持并发读,写操作也有较高的并发度。
javaConcurrentHashMap<String, String> map = new ConcurrentHashMap<>(); map.put("key", "value"); -
CopyOnWriteArrayList:读操作无锁,写操作通过复制副本实现,适用于读多写少的场景。
javaCopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>(); list.add("element"); -
CopyOnWriteArraySet:基于CopyOnWriteArrayList实现,适用于读多写少的Set集合。
-
ConcurrentLinkedQueue:高效的并发队列,基于链表实现,无界线程安全队列,使用CAS实现。
javaConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>(); queue.offer("item"); -
BlockingQueue接口的实现类:
- ArrayBlockingQueue:有界阻塞队列,基于数组。
- LinkedBlockingQueue:可选有界阻塞队列,基于链表。
- PriorityBlockingQueue:支持优先级的无界阻塞队列。
- DelayQueue:延迟队列,元素只有在延迟期满时才能取出。
- SynchronousQueue:不存储元素的阻塞队列。
同步容器
同步容器通过synchronized关键字实现线程安全,但性能较低。
-
Vector:线程安全的动态数组,方法使用synchronized修饰。
javaVector<String> vector = new Vector<>(); vector.add("element"); -
Hashtable:线程安全的哈希表,方法使用synchronized修饰。
-
Stack:继承自Vector的线程安全栈。
-
Collections.synchronizedXXX方法:
javaList<String> syncList = Collections.synchronizedList(new ArrayList<>()); Set<String> syncSet = Collections.synchronizedSet(new HashSet<>()); Map<String, String> syncMap = Collections.synchronizedMap(new HashMap<>());
锁相关的类
锁相关的类提供更灵活的线程同步机制。
-
ReentrantLock:可重入互斥锁,支持公平锁和非公平锁。
javaReentrantLock lock = new ReentrantLock(); lock.lock(); try { // 临界区代码 } finally { lock.unlock(); } -
ReentrantReadWriteLock:读写锁,读读不互斥,读写互斥,写写互斥。
javaReentrantReadWriteLock rwLock = new ReentrantReadWriteLock(); rwLock.readLock().lock(); rwLock.writeLock().lock(); -
StampedLock:JDK 8引入,比ReentrantReadWriteLock更高效的读写锁。
线程管理类
线程管理类用于管理线程的生命周期和资源。
-
ThreadPoolExecutor:线程池实现类,提供线程的复用和管理。
-
Executors:线程池工厂类,提供创建各种线程池的静态方法。
同步工具类
同步工具类用于协调多个线程的执行顺序。
- Semaphore:信号量,控制同时访问的线程数。
- CountDownLatch:倒计时器,等待多个线程完成。
- CyclicBarrier:循环屏障,多个线程互相等待。
- Phaser:阶段器,更灵活的同步屏障。
- Exchanger:交换器,线程间交换数据。