知识点
死锁条件
必须同时满足:
- 互斥等待(意思是存在锁)
- hold and wait
- 循环等待
- 无法剥夺的等待
死锁防止
- 破除互斥等待–>一般无法破除
- 破除hold and wait–>一次性获取所有资源
- 破除循环等待–>按顺序获取资源
- 破除无法剥夺的等待–>加入超时
线程的状态
新建状态(New)
就绪状态(Runnable)
运行状态(Running)
阻塞状态(Blocked)
死亡状态(Dead)
一个很好的讲解https://blog.csdn.net/peter_teng/article/details/10197785#:~:text=%E7%BA%BF%E7%A8%8B%E4%BB%8E%E5%88%9B%E5%BB%BA%E3%80%81%E8%BF%90%E8%A1%8C%E5%88%B0,%E9%98%BB%E5%A1%9E%E7%8A%B6%E6%80%81%E5%8F%8A%E6%AD%BB%E4%BA%A1%E7%8A%B6%E6%80%81%E3%80%82
线程池
- 创建线程开销大
- 线程池:预先建立好线程,等待任务派发
- 线程池的参数:
corePoolSize:线程池中初始线程的数量,可能处于等待状态
maximumPoolSize:线程池中最大允许线程数量
KeepAliveTime:超出corePoolSize部分线程如果等待这些时间将被回收。
synchronised的底层实现
详细讲解:https://juejin.cn/post/6844903960826871815
同步代码块:采用monitorenter、monitorexit两个