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.输入需要访问的网址,点击扩展插件即可进行图片…...
AI大模型应用开发全攻略:从入门到精通,掌握LLM、RAG、Agent核心技能!“
本文全面介绍了AI大模型应用开发的核心技术和实践。从大模型API交互基础,到关键参数Messages和Tools的作用,深入解析了RAG、ReAct、Agent等应用范式。文章还探讨了Fine-tuning微调和Prompt提示词工程的重要性,强调工程实践与业务需求相结合。…...
Tftpd32/Tftpd64不止是TFTP!手把手教你玩转它的DHCP和Syslog服务器功能
Tftpd32/Tftpd64:解锁DHCP与Syslog服务的隐藏潜力当大多数人提起Tftpd32/Tftpd64时,第一反应往往是它作为TFTP服务器的功能。这款轻量级工具确实在文件传输领域表现出色,但它的能力远不止于此。今天,我们将深入探索这款软件中两个…...
DIY复刻经典:Texar Audio Prism动态处理器克隆套件全攻略
1. 项目概述:Texar Audio Prism 克隆套件如果你在专业音频圈子里混过一段时间,尤其是对上世纪八九十年代那些经典的、带点“魔法”色彩的外置动态处理器感兴趣,那么“Texar Audio Prism”这个名字你大概率不会陌生。它不是最常见的1176或者LA…...
Windows终极PDF处理工具:3步免费安装Poppler完整指南
Windows终极PDF处理工具:3步免费安装Poppler完整指南 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 你是否曾经为在Windows上处理PDF文…...
关联规则挖掘在Calabi-Yau流形Hodge数分析中的应用与复现
1. 项目概述:当数据挖掘遇见高维几何在理论物理和代数几何的交叉领域,Calabi-Yau流形一直扮演着核心角色。这些具有特殊拓扑结构的空间,不仅是弦理论中额外维度紧化的关键候选者,其本身丰富的数学性质也吸引着无数研究者。然而&am…...
如何快速集成 react-native-bottom-sheet-behavior:5 分钟搞定 Android 底部弹窗
如何快速集成 react-native-bottom-sheet-behavior:5 分钟搞定 Android 底部弹窗 【免费下载链接】react-native-bottom-sheet-behavior react-native wrapper for android BottomSheetBehavior 项目地址: https://gitcode.com/gh_mirrors/re/react-native-bottom…...
解决方法:庐山派K230接串口没识别到端口问题
一、插入usb转串口工具之前二、插入usb转串口工具之后三、解决方法说明:🔍 核心原因:USB Serial 设备,没有被识别为 COM 口你现在看到的 USB Serial,说明开发板已经正常启动了,USB 也被电脑识别到了&#x…...
LeagueAkari:英雄联盟终极自动化助手革命性指南
LeagueAkari:英雄联盟终极自动化助手革命性指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否在英雄联盟游戏中反复经历这…...
Driver Store Explorer终极指南:轻松管理Windows驱动存储区,释放宝贵磁盘空间
Driver Store Explorer终极指南:轻松管理Windows驱动存储区,释放宝贵磁盘空间 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否曾为Windows系统越来越慢而烦…...
从XAI到HXAI:构建以人为中心的可解释AI框架与实践
1. 项目概述:从“黑箱”到“白盒”,构建可信AI的演进之路在机器学习项目里摸爬滚打了十几年,我见过太多因为模型“说不清道不明”而引发的信任危机。一个在测试集上表现完美的信用评分模型,可能因为无法向风控专家解释“为什么拒绝…...
