并发编程 Review

一、多线程的使用及意义

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

并发编程七、J.U.C并发工具及原理分析 02

八、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密集型、
线程池初始化、线程池关闭、线程池监控、线程池大小的动态调整

6. callable/future区别、future原理

并发编程九、J.U.C 线程池

原文地址:https://www.cnblogs.com/Qkxh320/p/threads_review.html