java求职学习day15
多线程
1 基本概念
1.1 程序和进程的概念
1.2 线程的概念
我们刚刚说到,为了让操作系统啊,同时可以执行多个任务。我们是不是提出多进程的理念,就是多个进程,每个进程干一个活,多个进程同时启动,不就可以同时执行多个任务了吗?
但是我们又说到进程,因为毕竟它消耗资源比较多,所以进程的数量实际上是比较局限。那怎么办呀?那我们现实生活中,我们的计算机中确实要需要执行很多任务啊,对不对?那有没有更?好的办法呢,后来我们就提出一个概念,叫线程。
1.2.0 问题0:”所谓并发呀指的是宏观并行,微观串行“,啥意思啊?
”所谓并发呀指的是宏观并行,微观串行“,啥意思啊?就是你通过一个时间段儿上来看。通过一个时间段来看的话,是不是三波同学都在上课?但是其实你在任意一个时间点上,如果进来瞅一眼的话,你会发现我其实是不是只是在给一波小伙伴讲课?所以这就叫宏观,表面上看是在同时执行,但到微观到底层真正的去抠的话,实际上是不是一个一个在执行。
1.2.1 问题1:通俗的解释一下什么叫做多线程?

1.2.2 问题2:那开多线程的好处是什么?
它可以同时依然可以同时执行多个任务。而且最重要的是,线程是轻量级的,什么意思啊?它不像进程,只要新建一个进程,就要去消耗CPU,新申请内存空间对不对?而线程它会共享它所在进程的资源也就是说,它对资源的消耗比较小。明白了吧
实际上我们主流的技术还是采用多线程技术,因为多线程既节省资源,又同时能够让它执行多个任务。
1.2.3 问题3:多线程是如何工作的?
让CPU快速的在多个线程之间切换,明白了吧,每个线程都分配一个很小的时间片,然后迅速切换,只要速度足够快,是不感觉就像这些线程同时在执行。我们把这种策略叫做时间片轮转法。
1.2.4 问题4:为什么使用多线程?
我们说,无论是多进程还是多线程,我们最终的目的实际上是不是还是为了让我们的操作系统,让我们的计算机,尽可能的同时执行多个任务。
也就是说,在以后的开发中,只要涉及到让我们的这个代码,或者说这个模块同时干多个活儿的时候,我们就要怎么办?采用多线程或者多进程的机制,那在JAVA中基本上就是多线程理念。
2 线程的创建(重中之重)
2.1.1 问题5:创建那在JAVA中到底如何创建线程呢?
我们得借助一个类来自于java.long包里面的类
2.1 Thread类的概念
2.2 创建方式
那么通过下面的这个源码追踪啊,我们发现当我们用无参方式new出来对象之后,再去调用run方法。是不是他确实啥也不会干。这样一来,我觉得大家就应该能够理解这句话了,就是创建线程的第一种方式,里面要求自定义类,继承Thread类之后还要重写run
因为thread类中的run方法,它啥也不干呀,对不对?那你只有重写这个方法之后,是不是才能给这个方法?赋予一定的功能。对不对?所以我们要重写它。
问题6:为什么这里需要创建对象调用Strart方法?为什么不是调用run方法?
问题描述:
首先,为了解决上面的问题,我们需要对代码进行调整
接下来我们分别用run方法和start方法进行测试,我们可以观察一下输出结果
我们也要涉及到几个方法,
比如说run;比如说start还有呢,我们要构造thread类型的对象。那构造thread类型的对象的话呢?那我们怎么去构造?那是不是肯定要调用thread类的构造方法?所以这里面呢,有几个相关的方法。
2.3 相关的方法

注意:
(1)所以说start这个方法的作用是用来实现什么来着?线程的启动,而一旦线程启动之后JAVA虚拟机一定要注意啊,是JAVA虚拟机自动去调用这个线程的run方法;并不是start里面去调run。明白了吧,是JAVA虚拟机去调run方法,并不是这个start的原码中去调run方法,所以很多小伙伴呢,在学到这的时候,总想去看源码,结果呢start的源码里面发现,找不着run方法的调用,原因是因为run方法是由JAVA虚拟机去调用。
(2)如果的话,我们使用前面这两种构造方法构造出来的线程对象去调用run方法,实际上是不是它会啥也不干啊。
2.3.1 问题6:如果用Tread()来构造的话,如何证明run方法什么也没干?
有些这个方法的调用的话呢,它呃就是本来的话呢,里面就是啥也不打印。对不对?那你从打印结果上看不到,那很正常嘛。所以要想真正的看一下这个方法,到底是否啥也不干,是不还得需要去看一下源码。
(下面3张图片)是通过ctrl+点击代码中的Thread方法;最后一张图是通过ctrl+点击run方法
而我们刚刚说了这个形参变量,它这个值是什么?形参变量target值是null
那么我们this.target=target,那说白了就是成员变量target值也变成了null。
上面两句话是补充上面图片要表达的内容。
那么通过上面的这个源码追踪啊,我们发现当我们用无参方式new出来对象之后,再去调用run方法。是不是他确实啥也不会干。这样一来,我觉得大家就应该能够理解这句话了,就是创建线程的第一种方式,里面要求自定义类,继承Thread类之后还要重写run
因为thread类中的run方法,它啥也不干呀,对不对?那你只有重写这个方法之后,是不是才能给这个方法?赋予一定的功能。对不对?所以我们要重写它
那接下来我们就写一个类,然后继承类,然后并且重写一下这种方法,我们进行测试。
2.4 执行流程
2.5 方式的比较
2.6 匿名内部类的方式
3 线程的生命周期(熟悉)

4 线程的编号和名称(熟悉)

5 常用的方法(重点)

6 线程同步机制(重点)
6.1 基本概念
6.2 解决方案
6.3 实现方式
6.4 静态方法的锁定
6.5 注意事项
6.6 线程安全类和不安全类
6.7 死锁的概念
6.8 使用Lock(锁)实现线程同步

6.9 Object类常用的方法

6.10 线程池(熟悉)




相关文章:

java求职学习day15
多线程 1 基本概念 1.1 程序和进程的概念 (1)程序 - 数据结构 算法,主要指存放在硬盘上的可执行文件。 (2)进程 - 主要指运行在内存中的可执行文件。 (3)目前主流的操作系统都支持多进程&a…...
【脚本】如何禁用谷歌浏览器自动更新
这里写自定义目录标题 问题描述解决方法代码 问题描述 最近更新系统以后,发现chrome老是自己更新,导致我的代码也得跟着他更新,就跟一个拜托不掉的狗皮膏药一样。 解决方法 于是我写了一个脚本,以下代码都是bash代码࿰…...

【Linux】华为服务器使用U盘安装统信操作系统
目录 一、准备工作 1.1 下载UOS官方系统 1.2制作启动U盘 1.3 服务器智能管理系统iBMC 二、iBMC设置U盘启动 一、准备工作 1.1 下载UOS官方系统 服务器CPU的架构是x86-64还是aarch64),地址:统信UOS生态社区 - 打造操作系统创…...
WPF3-在xaml中引用其他程序集的名称空间
1. 如何在XAML里引用类库中的名称空间和类2. 小结 1. 如何在XAML里引用类库中的名称空间和类 首先需要记住一点:把类库引用到项目中是引用其中名称空间的物理基础,无论是C#还是XAML都是这样。 一旦将一个类库引用进程序,就可以引用其中的名…...

Python 在Word中添加、或删除超链接
在Word文档中,超链接是一种将文本或图像连接到其他文档、网页或同一文档中不同部分的功能。通过添加超链接,用户可以轻松地导航到相关信息,从而增强文档的互动性和可读性。本文将介绍如何使用Python在Word中添加超链接、或删除Word文档中的超…...
基于 WPF 平台使用纯 C# 实现动态处理 json 字符串
一、引言 在当今的软件开发领域,数据的交换与存储变得愈发频繁,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁、易读、便于解析和生成的特点,被广泛应用于各种应用程序中。在 W…...
「全网最细 + 实战源码案例」设计模式——单例设计模式
核心思想: 属于创建型设计模式,核心目的是确保一个类在整个程序运行期间只有一个实例,并提供一个全局访问点来获取该实例。 控制共享资源的访问(如数据库链接、配置管理、日志处理器等) 真实世界类比:政府…...
第01章 19 通过点数据逐级构建球体体数据的综合性小例子
用VTK库来创建一个三维图像数据(vtkImageData),并填充标量数据以表示一个球体的体数据。球的半径为50,体数据的空间间隔为1.0/1000。 首先,我需要包含VTK的头文件,并且创建一个vtkImageData对象。然后&…...

CVE-2024-23897-Jenkins任意文件读取漏洞复现
content Jenkins是什么CVE-2024-23897总结修复建议 Jenkins是什么 Jenkins是一人基于Java开发的、可扩展的持续集成引擎,用于持续、自动地构建/测试软件项目,可以监控一些定时执行的任务。 官网文档: Jenkins是一款开源 CI&CD 软件&…...
前端react后端java实现提交antd form表单成功即导出压缩包
前端(React Ant Design) 1. 创建表单:使用<Form>组件来创建你的表单。 2. 处理表单提交:在onFinish回调中发起请求到后端API,并处理响应。 import React from react; import { Form, Input, Button } from ant…...

基于ESP32的桌面小屏幕实战[6]:环境搭建和软件基础
摘要 本文分为两部分:Linux开发环境搭建和软件基础。Linux开发环境搭建介绍了Ubuntu虚拟机安装及SSH、Samba配置,可以实现用VSCode操作虚拟机。为了后续工作,搭建了乐鑫ESP32 SDK环境。软件基础介绍了Linux开发常用的软件基础,包…...

接口(完)
大家好,今天我们着重来总结一下接口的知识,并且将接口和抽象类的区别罗列一下,帮助我们更好的认识抽象类和接口。 2.7 抽象类和接口的区别. 抽类和接口都是Java中多态的常见使用方式,都需要重点掌握,同时又要认清两者的区别(重要!!…...

数据结构——实验七·排序
欢迎各位大佬们来到Tubishu的博客🌟 Tubishu是一名计算机本科生,不定期发送一些在学校的成果供佬们消遣~希望能为佬的编程之路添砖加瓦⭐🔥 求各位大佬们垂怜🔥点赞评论一下呗🔥🔥 本文专栏 ➡️ 数据结构 …...
JVM堆空间
JVM(Java虚拟机)堆空间是Java内存管理的核心区域之一,用于存储Java对象实例。以下是关于JVM堆空间的详细介绍: 1. 堆空间的作用 • 存储对象实例:几乎所有的Java对象实例(通过new关键字创建的对象…...
【详细】SSH公私钥认证与渗透测试攻击场景
SSH(Secure Shell)是一个用于远程登录和执行命令的网络协议,其认证方式通常有两种:基于密码的认证和基于公私钥的认证。本文将详细介绍SSH公私钥认证机制,并探讨在渗透测试场景中,如何利用对靶机具有读取和…...

常见的多媒体框架(FFmpeg GStreamer DirectShow AVFoundation OpenMax)
1.FFmpeg FFmpeg是一个非常强大的开源多媒体处理框架,它提供了一系列用于处理音频、视频和多媒体流的工具和库。它也是最流行且应用最广泛的框架! 官方网址:https://ffmpeg.org/ FFmpeg 的主要特点和功能: 编解码器支持: FFmpe…...

C++异步future
🌎 C11异步futrue 文章目录: C11异步futrue future介绍 应用场景 future操作 std::async函数模版 std::packaged_task类模版 std::promise类模版 🚀future介绍 std::future是C11标准库…...
Oracle 12c 中的 CDB和PDB的启动和关闭
一、简介 Oracle 12c引入了多租户架构,允许一个容器数据库(Container Database, CDB)托管多个独立的可插拔数据库(Pluggable Database, PDB)。本文档旨在详细描述如何启动和关闭CDB及PDB。 二、容器数据库 (CDB) 2.1…...
Vue组件开发-使用 html2canvas 和 jspdf 库实现PDF文件导出 设置页面大小及方向
在 Vue 项目中实现导出 PDF 文件、调整文件页面大小和页面方向的功能,使用 html2canvas 将 HTML 内容转换为图片,再使用 jspdf 把图片添加到 PDF 文件中。以下是详细的实现步骤和代码示例: 步骤 1:安装依赖 首先,在项…...

chrome插件:网页图片高清下载
前置条件: 安装有chrome谷歌浏览器的电脑 使用步骤: 1.打开chrome扩展插件 2.点击管理扩展程序 3.加载已解压的扩展程序 4.选择对应文件夹 5.成功后会出现一个扩展小程序 6.点击对应小程序 7.输入需要访问的网址,点击扩展插件即可进行图片…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖
在前面的练习中,每个页面需要使用ref,onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入,需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

零基础在实践中学习网络安全-皮卡丘靶场(第九期-Unsafe Fileupload模块)(yakit方式)
本期内容并不是很难,相信大家会学的很愉快,当然对于有后端基础的朋友来说,本期内容更加容易了解,当然没有基础的也别担心,本期内容会详细解释有关内容 本期用到的软件:yakit(因为经过之前好多期…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

Linux 下 DMA 内存映射浅析
序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...