2022-08-04 第六小组 高佳誉 学习笔记

锁和线程池

重点

  1. LockSupport工具类
  2. Lock锁
  3. 并发编程的三大特性
  4. JDK自带的四种线程池
  5. 自定义线程池

思维导图

知识点

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:直接丢弃任务

掌握程度

锁的应用基本了解,线程池部分一脸懵,知识点很模糊 自我建议:观看回放,尝试理解

收获

一个精彩的人生的前提是拥有一个良好的身体

学习效果展示

posted @   憨憨的时倾  阅读(17)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示