java

JUC并发编程(一)——并发工具类分类

Nick · 5月22日 · 2025年 · 本文2214字 · 阅读6分钟97

为了并发安全

从底层逻辑来分类

1.互斥同步
获取资源前,先去独占它

使用各种互斥同步的锁:
synchronized
ReentrantLock
Read WriteLock

使用同步的工具类(使用synchronized对集合进行同步):
Collections.synchronizedList(new ArrayList())等
Vector等

2.非互斥同步
获取资源前,不需要独占它

Atomic*基本类型原子类:
1.AtomicInteger: 整形原子类
2.AtomicLong:长整型原子类
3.AtomicBoolean:布尔型原子类

Atomic*Array数组类型原子类(数组里的元素,
1.AtomicIntegerArray: 整形数组原子类都可以保证原子性)
2.AtomicLongArray: 长整形数组原子类
3.AtomicReferenceArray:引用类型数组原子类

Atomic*Reference引用类型原子类:
1.AtomicReference:引用类型原子类
2.AtomicStampedReference: 引用类型原子类的升级,带时间戳,可以解决ABA问题
3.AtomicMarkableReference

Atomic*FieldUpdater升级原子类:
1.用Atomic*FieldUpdater等升级自己的变量
2.AtomicIntegerFieldUpdater:原子更新整形字段的更新器
3.AtomicLongFieldUpdater:原子更新长整形字段的更新器

Adder加法器:
1.LongAdder
2.DoubleAdder

Accumulator累加器:
1.LongAccumulator
2.DoubleAccumulator

3.结合互斥和非互斥同步
线程安全的并发容器

ConcurrentHashMap
CopyOnWriteArrayList

并发队列(阻塞队列和非阻塞队列 ):
阻塞队列:
1.ArrayBlockingQueue
2.LinkedBlockingQueue
3.PriorityBlockingQueue
4.SynchronousQueue
5.DelayedQueue
6.TransferQueue

非阻塞队列:ConcurrentLinkedQue

ConcurrentSkipListMap和ConcurrentSkipListSet

4.无同步方案、不可变
变量在生产之后,永远不会变化,也是线程安全的

final关键字

线程封闭:
1.ThreadLocal
2.栈封闭

使用者角度来分类

1.避免共享变量

线程封闭:
1.ThreadLocal
2.栈封闭

2.共享变量,但是加以限制和处理

互斥同步:
使用各种互斥同步的锁:synchronized或Lock接口的相关类

final关键字

3.使用成熟工具类

线程安全的并发容器:

ConcurrentHashMap

CopyOnWriteArrayList

并发队列(阻塞队列和非阻塞队列 ):
阻塞队列:
1.ArrayBlockingQueue
2.LinkedBlockingQueue
3.PriorityBlockingQueue
4.SynchronousQueue
5.DelayedQueue
6.TransferQueue
非阻塞队列:ConcurrentLinkedQue

ConcurrentSkipListMap和ConcurrentSkipListSet

使用同步工具类

atomic包,原子类:

Atomic*基本类型原子类:
1.AtomicInteger: 整形原子类
2.AtomicLong:长整型原子类
3.AtomicBoolean:布尔型原子类

Atomic*Array数组类型原子类(数组里的元素,
1.AtomicIntegerArray: 整形数组原子类都可以保证原子性)
2.AtomicLongArray: 长整形数组原子类
3.AtomicReferenceArray:引用类型数组原子类

Atomic*Reference引用类型原子类:
1.AtomicReference:引用类型原子类
2.AtomicStampedReference: 引用类型原子类的升级,带时间戳,可以解决ABA问题
3.AtomicMarkableReference

Atomic*FieldUpdater升级原子类:
1.用Atomic*FieldUpdater等升级自己的变量
2.AtomicIntegerFieldUpdater:原子更新整形字段的更新器
3.AtomicLongFieldUpdater:原子更新长整形字段的更新器

Adder加法器:
1.LongAdder
2.DoubleAdder

Accumulator累加器:
1.LongAccumulator
2.DoubleAccumulator

管理线程、提高效率

线程池相关类:
Executor
Executors
ExecutorService

常见线程池
FixedThreadPool
CachedThreadPool
ScheduledThreadPool
SingleThreadExecutor
ForkJoinPool

能获取子线程的运行结果:
Callable
Future
Future Task

线程协作、满足业务逻辑

CountDownLatch(底层是AQS)
CyclicBarrier
Semaphore
Condition
Exchanger
Phaser
0 条回应
在线人数:1人 来访统计
新时代
Ado
隐藏