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


