当前位置: 首页 > news >正文

Java基础复习(JavaSE进阶)第八章 多线程

8-1 多线程使用

01 170、多线程:概述、线程创建方式一

02 171、多线程:线程创建方式二

缺点:需要多创建一个Runable对象

03 172、多线程:线程创建方式二(匿名内部类写法)

代码简化:

简化原理:因为我们可以把匿名内部类看作是一个对象,自然而然就可以把这个匿名内部类放在形参的位置。

而且这个runable有函数式接口注解,故还可以用lambda表达式继续简化:

04 173、多线程:线程创建方式三

第一步:创建Callable实现类,重写call方法

05 174、多线程:线程的常用方法

8-2 线程安全、线程同步

01 175、线程安全问题:概述

02 176、线程安全问题:模拟取钱案例

03 177、线程同步:概述

加锁的方式有三种:同步代码块。同步方法。lock锁

04 178、线程同步:同步代码块

“黑马”的作用:作为一个双引号字符串,是一个在字符串常量内的唯一值。具有唯一性,所以只会交给一个对象占有。

但实际上在开发当中,我们更多使用this来作为判断方式,代表交给前对象持有

如果是静态方法需要加锁。我们一般用类名.class作为判断

因为想要访问静态方法肯定是通过类名来访问,这样写相当于锁住所有想要通过类名调用该方法的线程,只允许一条线程通过。

总结:

05 179、线程同步:同步方法

直接写在需要线程保护的方法上

06 180、线程同步:Lock锁

第一步:

调用lock方法和unlock方法实现加锁和解锁

应该创建在类的开头作为一个实例变量。因为每个线程都需要属于自己的锁

注意事项:1

建议用final修饰,保证锁唯一,且不被修改

注意事项:2

使用try{}catch{}finally{}来处理被锁的区域,并将释放锁的部分写在finally中,防止由于程序出现bug导致锁无法被释放。

总结:

07 181、线程通信[了解]

案例:模拟厨师和吃货,厨师做包子吃货吃包子,有包子存在不做新包子,没包子吃就不吃。

厨师:

注意:一定是先唤醒再等待,不然会出bug

吃货:

通过互相唤醒互相等待实现了线程的通信。

8-3 线程池、其他细节

01 182、线程池:概述

线程池会固定几个工作线程,让他们反复地去处理任务队列中的任务,就不需要在每次请求都创建一个新的线程,用完再删除了。

02 183、线程池:线程池的创建

03 184、线程池:处理Runnable任务

 

第一步:创建线程池对象

第二步:定义一个runable的任务类,且在任务类中重写任务方法

第三步:new出任务对象,交给线程池,自动创建新线程自动处理自动执行:

//第四种拒绝策略相当于餐厅经理亲自服务

04 185、线程池:处理Callable任务

步骤1:做出任务类

步骤2:创建线程池编写demo

05 186、线程池:使用Executors得到线程池

对比如下:

高并发环境不要用Executors,会引发内存溢出

06 187、其他细节:并发并行

所以我们的多线程因该是并发且并行执行的。

07 188、其他细节:生命周期

http://www.xdnf.cn/news/91027.html

相关文章:

  • C++静态与动态联编区别解析
  • Vue3简介
  • TDengine 查询引擎设计
  • 滑动模式观测器(Sliding mode observer)
  • 机器视觉的液晶屏点胶应用
  • 飞搭系列 | 组件增加标记,提升用户体验
  • android开发-BuildConfig无法生成
  • [Java · 铢积寸累] 数据结构 — 二维数组 - 概念引入
  • 潮玩+智显 |电子价签演绎潮玩信息智显的百变状态
  • Linux系统之----进程的概念
  • GpuGeek:以弹性算力与全栈服务赋能产业智能升级
  • 继承相关知识
  • Kinibi-610a:面向芯片厂商与设备制造商的TEE升级详解
  • 学习笔记:黑马程序员JavaWeb开发教程(2025.3.25)
  • ctfshow web类 2-7题
  • pip的源管理和包管理
  • 初级云计算运维工程师学习二
  • DAS(分布式声波传感)工作流程
  • Windows:删除文件报(已解决)操作无法完成,因为其中的文件夹或文件已在另一程序中打开
  • 关于QLabel上显示图片扩展的问题记录
  • 文件操作函数
  • PLOG安装
  • NumPy入门:从数组基础到数学运算
  • 深度学习中的“重参数化”总结
  • 正点原子TFTLCD扩展
  • 框架开发.idea配置项提示
  • 【算法】BFS-解决FloodFill问题
  • 基于 Spring Boot实现的图书管理系统
  • 强化学习框架:OpenRLHF源码解读,模型处理
  • C++ 算法(12):数组参数传递详解,值传递、指针传递与引用传递