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