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.输入需要访问的网址,点击扩展插件即可进行图片…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
《基于Apache Flink的流处理》笔记
思维导图 1-3 章 4-7章 8-11 章 参考资料 源码: https://github.com/streaming-with-flink 博客 https://flink.apache.org/bloghttps://www.ververica.com/blog 聚会及会议 https://flink-forward.orghttps://www.meetup.com/topics/apache-flink https://n…...
图表类系列各种样式PPT模版分享
图标图表系列PPT模版,柱状图PPT模版,线状图PPT模版,折线图PPT模版,饼状图PPT模版,雷达图PPT模版,树状图PPT模版 图表类系列各种样式PPT模版分享:图表系列PPT模板https://pan.quark.cn/s/20d40aa…...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...
深度学习水论文:mamba+图像增强
🧀当前视觉领域对高效长序列建模需求激增,对Mamba图像增强这方向的研究自然也逐渐火热。原因在于其高效长程建模,以及动态计算优势,在图像质量提升和细节恢复方面有难以替代的作用。 🧀因此短时间内,就有不…...
零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...
springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...
GraphQL 实战篇:Apollo Client 配置与缓存
GraphQL 实战篇:Apollo Client 配置与缓存 上一篇:GraphQL 入门篇:基础查询语法 依旧和上一篇的笔记一样,主实操,没啥过多的细节讲解,代码具体在: https://github.com/GoldenaArcher/graphql…...
