2022-08-04 第六小组 高佳誉 学习笔记
锁和线程池
重点
- LockSupport工具类
- Lock锁
- 并发编程的三大特性
- JDK自带的四种线程池
- 自定义线程池
思维导图
知识点
1. LockSupport工具类
所有的方法都是静态方法,可以让线程在任意位置阻塞,阻塞滞后也有唤醒的方法。
park:停车。如果我们把Thread看成一辆车的话,park就是让车停下
unpark:让车启动然后跑起来
2.Lock锁
键盘输入和打印输出是极其耗资源的,因为是频繁的IO操作,这两种在实际开发中绝对不允许使用。
如果能用Lock,优先选择Lock,如果Lock太麻烦,选择synchronized代码块,如果synchronized代码块解决不了,使用synchronized方法。
Lock接口的实现类—ReentrantLock
ReentrantLock,可重入锁。实现了Lock接口
3. synchronized和Lock的异同
1.Lock是一个接口,synchronized是一个关键字,synchronized是由底层语言(C语言)实现的。
2.Synchronized(自动释放)发生异常时,会自动释放线程占用的锁,不会发生死锁。Lock发生异常(需要手动释放),若没有主动释放,极有可能占用资源不放手,需要在finally中手动释放锁(调用Lock方法)
3.Lock可以让等待锁的线程响应中断,使用synchronized只会让等待的线程一直等待下去,不能响应中断。
4.Lock可以提高多个线程进行读操作的效率。
4. 并发编程的三大特性
1.原子性:原子操作可以是一个步骤也可以是多个步骤,但是顺序不能乱,也不可以被切割只执行其中的一部分,将整个操作视为一个整体。原子性不仅仅是多行代码,也可能是多条指令。
2.可见性
3.有序性(指令重排)
5. 线程池中参数的意义*****
corePoolSize:线程池里线程的数量,核心线程池的大小
maximumPoolSize:制定了线程池里的最大线程数量
keepAliveTime:当线程池里的线程数量大于核心的大小(corePoolSize),多出辣的空闲线程,多长时间被销毁。
unit(枚举):时间单位
workQueue:任务队列,用于存放提交但是尚未被执行的任务
threadFactory:线程工厂,用来创建线程,线程工厂就是给我们new线程的
handler:拒绝策略,是将任务添加到线程池中,线程池拒绝该任务所采取的的相应的措施。
6. 线程池提供的四种拒绝策略
AbortPolicy:直接抛出异常(默认的策略)
CallerRunPolicy:用调用者所在的线程来执行任务
DiscardOldestPolicy:丢弃阻塞队列中最靠前的任务并执行当前任务
DiscardPolicy:直接丢弃任务
掌握程度
锁的应用基本了解,线程池部分一脸懵,知识点很模糊 自我建议:观看回放,尝试理解
收获
一个精彩的人生的前提是拥有一个良好的身体
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现