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.输入需要访问的网址,点击扩展插件即可进行图片…...
别再只改yaml了!深入理解YOLOv5检测头:从P2到P5,如何根据你的目标大小选择最优组合?
深入解析YOLOv5多尺度检测头:从理论到实践的选择艺术 在计算机视觉领域,目标检测一直是核心任务之一。YOLO系列算法以其高效的检测速度和良好的精度表现,成为工业界和学术界的热门选择。然而,很多开发者在使用YOLOv5时,…...
基于FPGA的伺服驱动系统:电流环控制与多环路反馈、SVPWM及编码器协议实现的研究
伺服驱动FPGA电流环,包含坐标变换,电流环,速度环,位置环,电机反馈接口,SVPWM,编码器协议,电流环和编码器协议都是FPGA里实现的伺服驱动系统里玩FPGA可不是闹着玩的,尤其是…...
ide-eval-resetter:突破JetBrains IDE试用期限制的创新方案——2026开发者必备指南
ide-eval-resetter:突破JetBrains IDE试用期限制的创新方案——2026开发者必备指南 【免费下载链接】ide-eval-resetter 项目地址: https://gitcode.com/gh_mirrors/id/ide-eval-resetter 问题引入:JetBrains IDE试用期限制的痛点分析 作为开发…...
解密Wallpaper Engine资源宝库:RePKG工具完全实战指南
解密Wallpaper Engine资源宝库:RePKG工具完全实战指南 【免费下载链接】repkg Wallpaper engine PKG extractor/TEX to image converter 项目地址: https://gitcode.com/gh_mirrors/re/repkg RePKG是一款专为Wallpaper Engine设计的开源资源处理工具…...
长上下文与RAG
读到一篇探讨RAG技术的文章,很受用,遂记录一下。核心结论:RAG不会被无限上下文取代。 原文地址:LLM无限上下文了,RAG(Retrieval Augmented Generation)还有意义吗? - 今日头条 以下…...
Linux服务器日志爆满?5个实用命令快速定位并清理大日志文件
Linux服务器日志爆满?5个实用命令快速定位并清理大日志文件 当服务器磁盘空间告急时,日志文件往往是罪魁祸首。作为系统管理员,我们需要快速定位问题并安全清理,避免服务中断。本文将分享5个核心命令的组合使用技巧,帮…...
Enhancing LLM Reasoning with Knowledge Graphs: A Faithful and Interpretable Approach
1. 为什么需要知识图谱增强LLM推理 最近两年,大型语言模型(LLM)的表现确实让人惊艳。我测试过GPT-4在代码生成、文案创作等场景的表现,效果确实超出预期。但当我尝试用LLM做知识密集型任务时,比如回答"贾斯汀比伯…...
SEO_SEO优化常见误区及正确操作指南
SEO优化常见误区 在互联网时代,SEO(搜索引擎优化)已成为网站运营中不可或缺的一部分。很多人在实际操作中却常常犯下一些常见的SEO优化误区,这不仅影响了网站的流量,也可能导致搜索引擎的惩罚。下面我们将详细分析这些…...
原神高帧率解锁终极方案:一键突破60帧限制的完全指南
原神高帧率解锁终极方案:一键突破60帧限制的完全指南 【免费下载链接】genshin-fps-unlock unlocks the 60 fps cap 项目地址: https://gitcode.com/gh_mirrors/ge/genshin-fps-unlock 想象一下这样的场景:你在蒙德的原野上自由奔跑,角…...
基于AI政策路径与通胀预期模型的美联储决策分析:鲍威尔观望信号引发加息预期归零
摘要:本文通过构建AI政策路径预测模型,结合通胀预期识别系统、能源价格传导算法与劳动力市场评估框架,对美联储在当前环境下的利率决策逻辑进行分析,重点解析“观望策略”背后的模型依据及市场加息预期快速回落的原因。一、AI政策…...
