Java并发编程的知识多且杂,全部学习有一定的难度,这里先列一下大纲,感兴趣的童鞋可以按照发布文章的顺序逐篇学习,如果对你有帮助,赞一个就是对我最大的认可和鼓励(*^▽^*)。
https://www.processon.com/v/64afafaee26df07aec991842
- 并发理论基础
- 并发&并行
- 线程基础
- 进程&线程
- 线程创建方式(4种)
- 线程的生命周期
- Java层面(6) - New、Runable、Waiting、Timed_waiting、Blocked、Terminate
- OS层(5)- 新建、就绪(可运行)、运行、休眠、终结
- ThreadLocal
- Java中的引用类型-强、软、弱、虚
- 定义/原理
- 内存溢出问题
- 线程常用方法 -- start、yield、sleep、interrupt、isInterrupt、interrupted、stop、destory
- 线程终止的方式
- stop 强制终止,可能会造成不可预知的问题
- 两阶段式终止线程 - 设置中断标记位、符合条件调用interrupt终止
- 线程休眠的方式
- Threed.sleep()
- Object.wait()
- LockSupport.park()
- 线程间通信方式
- Monitor(管程)
- 多线程模型
- 并发三大特性(并发编程bug的源头)
- 可见性
- 有序性
- 原子性
- JMM(Java内存模型)
- JMM定义/作用
- 内存交互的八大原子操作
- JMM和硬件内存架构的关系
- JMM的内存可见性保证
- volatile深入解读
- 作用
- 4种内存屏障
- 保证可见性的原理
- 保证有序性的原理
- CAS原理
- 定义/原理(三个操作数:内存位置、预期原值、新值)
- 存在的问题
- happens-before原则
- CPU高速缓存架构
- 缓存一致性协议
- 伪共享问题
- 并发三大特性(并发编程bug的源头)
- 线程安全
- 线程安全问题
- 运行结果错误
- 活跃性问题(死锁、活锁、饥饿)
- 发布未初始化完成的对象(DCL模式)
- 线程安全解决方案
- 无锁实现方案
- 局部变量
- final关键字修饰
- ThreadLocal
- CAS(原子变量)
- 有锁的解决方案
- 锁分类
- 独占锁/共享锁
- 公平锁/非公平锁
- 可重入锁/不可重入锁
- 乐观锁/悲观锁
- 可中断锁/不可中断锁
- 自旋锁/非自旋锁
- synchronized的三种锁状态-偏向锁、轻量级锁、重量级锁
- 内置锁synchronized
- 临界区
- 同步/互斥
- 使用方式
- 虚假唤醒
- 底层原理
- 锁升级机制
- 锁优化
- synchronized和volatile
- Lock
- 锁分类
- 无锁实现方案
- AQS
- 什么是AQS
- 如何实现一个同步器
- 基于AQS实现的同步器
- ReentrantLock
- ReentrantReadWriteLock
- CountDownLatch
- Semaphore
- CyclicBarrier
- 线程安全问题
- 并发工具集
- atomic包下的原子类
- 线程池
- Fork/Join
- Future
- 基于AQS实现的同步器
- 并发容器
- ConcurrentHashMap
- Collections.synchronizedList()
- Collections.synchronizedSet()
- BlockedQueue
- 高性能内存队列 Disruptor
- 并发设计模式
- 终止线程的设计模式
- 避免共享的设计模式
- 多线程版本的if设计模式
- 多线程分工模式