目录
一、多线程的使用及意义
1. 进程与线程,并发与并行的区别
2. Java中线程的使用
thread、runable、callable/future、Executors.newSingleThreadExecutor;
3. 线程的生命周期
启动、运行、终止、等待、超时等待、阻塞
4. 线程的启动
start
5. 线程的终止
interrupt
并发编程一、多线程的意义和使用
二、线程的安全性与线程通信
1. 线程的安全性
原子性、有序性、可见性
2. 锁、锁的种类
synchronized、对象锁/类锁/代码块锁
3. 锁的存储、锁的升级
对象头、偏向锁/轻量级锁/重量级锁
4. 线程的通信
wait、notify、notifyAll
5. 锁背后的设计哲学
三、线程安全性背后本质
1. 一个可见性问题引发的思考、volatile关键字
2. 从硬件层面探索可见性本质
CPU高速缓存、总线锁/缓存锁、缓存一致性协议EMSI、storeBuffer、指令重排序、内存屏障
3. Java层面的可见性
JMM内存模型、内存屏障loadstore、重排序
4. HappensBefore模型
顺序规则、volatile、传递性规则、start规则、join规则、监视器锁的规则
5. DCL半对象
四、死锁及线程隔离
1. 死锁产生的条件
互斥、占有且等待、不可抢占、循环等待
2. 如何避免死锁
mainLock、tryLock
并发编程四、死锁及线程隔离
五、JUC重入锁ReentrantLock
1. 核心仍然是线程安全问题
2. 重入锁的本质、锁的种类
对同一个共享变量state的抢占
重入锁/重入读写锁、公平锁/非公平锁
3. 底层核心AQS
AQS双向链表的同步队列、对同一个共享变量state的抢占
CAS/ABA问题
4. 思考同步锁的设计哲学
并发编程五、分析J.U.C中ReentrantLock的底层设计
六、JUC并发工具Condition
1. 共享锁、互斥锁
2. Condition使用、原理、共享锁的传递机制
await/signal、Condition等待队列
并发编程六、J.U.C并发工具及原理分析 01
七、JUC并发工具
1. BlockingQueue阻塞队列种类、原理
take、put
2. CountDownLatch
await、countDown
3. Semaphore
acquire、release
4. CyclicBarrier
await
5. Atomic原子类、CAS
八、HUC.CHM
1. ConcurrentHashMap 1.7/1.8对比
2. 数据结构
数组+单向链表/二叉树/红黑树
3. size统计
CountCell[]数组 辅助统计
4. 高低位迁移、并发辅助扩容
根据数组长度生产扩容戳、左移16位高低位迁移、高位代表数组标识/低位表示同时扩容的线程数量
5. 数据迁移
6. CHM设计哲学
并发编程八、J.U.C并发工具之ConcurrentHashMap
九、JUC线程池、FutureTask
1. 线程池意义、种类
2. 线程池核心参数
3. 原理、阻塞队列在线程池中的应用
4. submit、execute区别
5. 线程池的使用注意事项
合理配置线程池大小、CPU密集型/IO密集型、
线程池初始化、线程池关闭、线程池监控、线程池大小的动态调整