为了并发安全
从底层逻辑来分类
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


