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.输入需要访问的网址,点击扩展插件即可进行图片…...
Objective-C常用命名规范总结
【OC】常用命名规范总结 文章目录 【OC】常用命名规范总结1.类名(Class Name)2.协议名(Protocol Name)3.方法名(Method Name)4.属性名(Property Name)5.局部变量/实例变量(Local / Instance Variables&…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要
根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分: 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...

android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...

自然语言处理——文本分类
文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益(IG) 分类器设计贝叶斯理论:线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别, 有单标签多类别文本分类和多…...

Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...

【大模型】RankRAG:基于大模型的上下文排序与检索增强生成的统一框架
文章目录 A 论文出处B 背景B.1 背景介绍B.2 问题提出B.3 创新点 C 模型结构C.1 指令微调阶段C.2 排名与生成的总和指令微调阶段C.3 RankRAG推理:检索-重排-生成 D 实验设计E 个人总结 A 论文出处 论文题目:RankRAG:Unifying Context Ranking…...