基本概念和原理
进程和线程
操作系统的进程和线程
java中的进程和线程
java的线程实现
java线程实现是使用的内核线程的实现:https://blog.csdn.net/aajjw/article/details/115713556
为什么我们需要线程?
多线程为啥效率高?一定效率高吗?
并发和并行
同步和异步 与 阻塞和非阻塞
java线程
java线程相关的API
- 创建线程的几种方式
- java线程的中断机制
java线程状态及其转化
synchronized
- synchronized语法
- synchronized原理
- synchronized锁优化
- 锁升级
- 自适应自旋
- JIT - 逃逸分析,锁消除
- JIT - 锁粗化
- 使用synchronized和wait、notify/notifyAll实现阻塞队列
volitile
volitile保证数据的可见性,不能保证原子性和有序性
参考:深入理解java虚拟机
参考:https://www.cnblogs.com/dolphin0520/p/3920373.html
JMM
- 缓存一致性协议
- JMM-java内存模型
- 原子性
- 可见性
- 有序性
ThreadLocal
多线程
多线程编程
- 线程的常见操作。创建,运行,暂停,销毁,让步,停止,中断信号,等待,唤醒等
- 多线程数据竞争问题,锁:sync关键字,Lock
- 多线程“流程控制”,同步点(如Semaphore)
- 多线程数据交换与共享
线程安全
参考:深入理解java虚拟机
- 不可变
- 绝对线程安全
- 相对线程安全
- 线程兼容
- 线程对立
多线程下JDK7 HashMap循环链表问题
JUC
CAS
- CAS是JUC的基石
- CAS思想
- CAS需要CPU指令集支持,java在Unsafe中封装了CAS操作
Atomic
分类
- AtomicBoolean,AtomicInteger,AtomicLong,AtomicReference // CAS不防止ABA
- AtomicIntegerArray,AtomicLongArray ,AtomicReferenceArray //针对数组中的元素进行原子操作
- AtomicLongFieldUpdater,AtomicIntegerFieldUpdater,AtomicReferenceFieldUpdater //Field是针对不是自己创建的类,构造原子类,实现原子操作
- AtomicMarkableReference,AtomicStampedReference //版本号,防止ABA
AtomicInteger常用方法
原理
使用CAS指令,使用自旋操作代替悲观锁
Lock
- LockSupport:用于创建锁和其他同步类的基本线程阻塞原语
- AQS:队列同步器,是很多JUC类的基础,使用CAS和LockSupport
- ReentrantLock:可重入互斥锁
- ReentrantReadWriteLock:可重入读写锁,读读不互斥
- StampedLock:可重入读写锁,读写不互斥
BlockingQueue
- Queue
- Deque
- BlockingQueue
- ArrayBlockingQueue 数组实现的环形阻塞队列,有容量限制。使用了ReentrantLock和Condition
- LinkedBlockingQueue 单向链表的阻塞队列
- PriorityBlockingQueue 优先级阻塞队列
- DelayQueue 延时队列
- SynchronousQueue 同步阻塞队列
- BlockingDeque
线程池
- 池化技术
- ThreadPoolExector
- 7个参数,其中有一个BlockingQueue
- 线程池模型,线程池状态及线程池API
- 调度策略
- 线程池初始化时是否始化线程?
- 我们将任务提交到线程池时,线程池如何执行?
- 线程池的正确的关闭
- 源码分析
- ScheduledThreadPoolExecutor
- ForkJoinPool
线程通信类
- Semaphore:信号量
- CountDownLatch:“倒计数器”
- CyclicBarrier:循环屏障,篱栅
- Phaser:阶段转移器
- Exchanger:交换器
集合类并发处理
- Collections.synchronizedXxx
- CopyOnWrite
- CopyOnWriteArrayList
- CopyOnWriteArraySet
- Concurrent
- ConcurrentLinkedQueue
- ConcurrentLinkedDeque
- ConcurrentHashMap
- ConcurrentSkipListMap
- ConcurrentSkipListSet