并发
2020-11-10 13:49:22 0 举报
AI智能生成
介绍并发知识
作者其他创作
大纲/内容
常见并发工具的使用和原理分析
阻塞队列及原子操作等并发工具
ConcurrentHashMap的源码设计
数据结构分析
Hash函数
MD5,SHA
HashTable
Node<K<V> tab[]
Hash冲突
线性寻址
ThreadLocalMap
链表
HashMap
再Hash
增加溢出区
解决并发访问,加锁(Synchrozied)
1.7 hashtable分为segment[],
锁住每一个segment,segment下为数组+俩表
锁住每一个segment,segment下为数组+俩表
1.8 HashTable为Node<K,V> tab[],锁住node,
node下为链表
node下为链表
HashTable实现是对整个数组加锁
addCount的设计思想
baseCount
cellCount[]
扩容时高低位迁移
低位数据不需要迁移,提高迁移性能
高位数据根据当前下标+扩容数,算出迁移后下标
线程池的设计与原理分析
什么是线程池
线程池的优势
java中提供的线程池
Executors
ThreadpoolExecutor
核心线程数
最大线程数
临时线程存活的时间
阻塞队列的大小
失败策略
线程池的原理分析
线程池的注意事项
CPU密集型
核心线程数=CPU核数+1
IO密集型
核心线程数=CPU数*2
Callable/Future使用及原理分析
Lock底层设计
ReentrantLock 重入锁
ReentrantReadWriteLock(重入读写锁)
StampedLock
思考锁的实现(设计思维)
AQS
原理
为什么采用双向链表
Lock和Synchronized的区别
1. Synchronzied是基于JVM层实现的,是java关键字
2. Lock是一个类,基于AQS实现
2. Lock是一个类,基于AQS实现
1. Synchrozied 在同步代码块或抛异常后,自动释放锁
2. Lock需要显示的调用unlock来释放
2. Lock需要显示的调用unlock来释放
1. Synchrozied适用于并发量较小的场景使用
2. Lock使用于大并发量的场景使用
2. Lock使用于大并发量的场景使用
多线程的意义和使用
并发/高并发
影响服务器吞吐量的因素
硬件
软件
并发和并行
java中的线程
Runnable接口
Thread类
Callable/Future 带返回值
线程的基础
线程的生命周期
java的线程有多少中状态:6种
new
ready
running
waiting
timed_waiting
blocked
线程的启动
线程的终止
interrupt()的作用
并发编程带来的挑战
count++指令
锁(Synchronized)
锁的使用
修饰在方法
修饰在代码块
锁的作用范围
修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁
静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁
修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。
锁的存储(对象头)
锁的升级
偏向锁
偏向锁的目的是消除数据在无竞争情
况下的同步操作,进一步提高程序的运行性能。
况下的同步操作,进一步提高程序的运行性能。
轻量级锁
重量级锁
总结
线程的通信(wait/notify)
线程安全性背后的本质之volatile
什么是可见性
硬件层面
CPU的高速缓存
总线锁&缓存锁
缓存一致性协议
Happens-Before模型
程序顺序原则
Thread.start原则
volatile变量规则
join规则
指令重排序
线程基础阶段性总结和扩展
线程基础回顾
死锁/活锁
死锁发送的条件
如何解决死锁问题
Thread.join
ThreadLocal
ThreadLocal原理分析
set方法最终实现
replaceStaleEntry
斐波那契数列
线性探测
面试题
自由主题
0 条评论
下一页