【JavaEE】【多线程】进程与线程的概念
目录
- 进程
- 系统管理进程
- 系统操作进程
- 进程控制块PCB关键属性
- cpu对进程的操作
- 进程调度
- 线程
- 线程与进程
- 线程资源分配
- 线程调度
- 线程与进程区别
- 线程简单操作代码
- 创建线程
- 查看线程

进程
进程是操作系统对一个正在运行的程序的一种抽象,可以把进程看做程序的一次运行过程;
同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。
系统管理进程
- 先描述一个进程:
使用结构体(因为操作系统主要由c语言写成),再描述出进程的核心属性即进程控制块PCB(Process Control Block)。 - 把多个进程组织起来:
使用数据结构组织起来,Linux使用链表来组织。
系统操作进程
- 进程的创建:创建一个PCB,初始化各个属性,加入到数据结构中。
- 进程的销毁:在数据结构中找到并删除。
- 查看进程列表:遍历查找到进程,现显示关键数据。
进程控制块PCB关键属性
- pid (进程id):相当于身份证,每个进程不一样。
- 一组内存指针:指向进程执行的指令,依赖。
- 文件描述符表:进程运行时,多数要与硬盘进行交互,硬盘储存数据的方式是通过文件存储,而文件的信息就保存在文件描述符表中。操作系统回将很多资源抽象为文件。
- 进程状态:两个主要的进程状态:1.就绪状态:进程随时能到CPU上执行,2.阻塞状态:进程当前不适合在CPU上执行。
- 进程优先级:优先级越高,分配的CPU资源越多。
- 进程的上下文:进程的调度原理,会使得进程在执行了一会之后会失去CPU,CPU再次执行回来时,要沿着上次结束状态执行。
而进程在CPU上运行时,床铺上的各种寄存器就会记录当前进程的中间状态,
将寄存器的各种记录保存到pcb对应属性,下次执行时又返回给对应寄存器就恢复了进程上下文。 - 进程的记账信息:统计每个进程在CPU上执行了多久。如果该进程长时间没分配到CPU资源,就会给这个进程倾斜一些CPU资源。
cpu对进程的操作
CPU对进程的操作是 分时复用。
分时复用就是指:把一份时间分为多份,每份时间执行对应的进程。由于CPU运行速度快,让进程切换的时间超过了肉眼反应。
并发执行:一个CPU核心上按照分时复用执行进程。
并行执行:多个CPU核心执行多个进程。
现代CPU都是两者兼备。
由于代码无法区分,平时就将两者合起来叫做“并发”
进程调度
进程调度就是指操作系统在并发执行进程时,进程之间的相互切换。
而上面PCB中的进程状态,进程优先级,进程上下文,进程记账信息就是支持进程调度的。
线程
线程:一个线程就是一个 “执行流”. 每个线程之间都可以按照顺讯执行自己的代码。就相当于是一个轻量级的进程。
线程与进程
线程与进程的关系是包含关系,每个进程中至少要有一个线程。
相当于周计划(进程)与日计划(线程)的关系。
线程资源分配
每个进程的创建需要申请资源,销毁需要释放资源。
而在一个进程中只有第一个线程创建需要申请资源,所有线程销毁完才需要释放资源。
而在一个进程中所有线程共享资源,这样会带来如果一个线程出问题,可能所有线程就出问题了。就像一个线程中抛出一个异常没处理,就将整个进程中的线程全部搞挂。
这样的好处是开销小,效率高,但是如果线程过多也会使线程调度开销大,影响效率。
线程调度
操作系统操作线程(一个进程内)也和进程一样有并发执行和并行执行。
线程也有线程状态,线程优先级,线程上下文,线程记账信息(与上诉进程的介绍一样,只需把进程改为线程即可)。
而内存指针和文件描述符表是一个进程中所有线程共享的。
线程与进程区别
- 进程是系统进行资源分配和调度的一个独立单位,线程是程序执行的最小单位。
- 进程有自己的内存地址空间,线程只独享指令流执行的必要资源,如寄存器和栈。
- 由于同一进程的各线程间共享内存和文件资源,可以不通过内核进行直接通信。
- 线程的创建、切换及终止效率更高。
线程简单操作代码
创建线程
创建线程有两种方式:
- 使用类继承Thread类,重写run方法。在主函数中创建好对象后调用start方法就创建好了一个线程。
class MyThread extends Thread {@Overridepublic void run() {//写代码}
}
public class Demo1 {public static void main(String[] args) {Thread thread = new MyThread();thread.start();}
}
- 实现Runnable接口,重写run方法,通过Thread创建对象时,将实现Runnable接口的类对象传到构造函数中,在调用start方法。
class MyRunnable implements Runnable {@Overridepublic void run() {}
}public class Demo2 {public static void main(String[] args) {MyRunnable myRunnable = new MyRunnable();Thread thread = new Thread(myRunnable);thread.start();}
}
- 还可以使用匿名内部类
Thread thread = new Thread() {
@Overridepublic void run() {//写代码}
}Thread thread = new Thread(new Runnable) {
@Overridepublic void run() {//写代码}
}
- lambda 表达式
Thread thread = new Thread ( () -> {//写代码不用重写run方法
});Thread thread = new Thread( (new Runnable) ->{
//写代码不用重写run方法
});
查看线程
在当前电脑上看由Java写的线程可以找到安装使用的JDK写的bin目录里面的Jconsole.exe程序。
运行这个程序里面就可以看当前的线程。
相关文章:

【JavaEE】【多线程】进程与线程的概念
目录 进程系统管理进程系统操作进程进程控制块PCB关键属性cpu对进程的操作进程调度 线程线程与进程线程资源分配线程调度 线程与进程区别线程简单操作代码创建线程查看线程 进程 进程是操作系统对一个正在运行的程序的一种抽象,可以把进程看做程序的一次运行过程&a…...
LeetCode hot100---贪心算法专题(C++语言)
贪心算法 当前取最优,最终完成全局最优1、买卖股票的最佳时机 (1)题目描述以及输入输出 (1)题目描述: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。(2)输入输出描述: 输入&…...

《PyTorch深度学习快速入门教程》学习笔记(第15周)
目录 摘要 Abstract 1. 安装Anaconda 2. 查看显卡驱动 3. 安装Pytorch 4. Pytorch加载数据 5. 常用数据集两种形式 6. 路径直接加载数据 7. Dataset加载数据 摘要 本周报的目的在于汇报《PyTorch深度学习快速入门教程》课程第一周的学习成果,主要聚焦于py…...
kubeadm部署k8s1.28.0主从集群(cri-dockerd)
1. kubernetes集群规划 主机IP主机名主机配置角色192.168.100.3master12C/4G管理节点192.168.100.4node12C/4G工作节点192.168.100.5node22C/4G工作节点 2. 集群前期环境准备 (1)初始化脚本 #!/bin/bash echo "——>>> 关闭防火墙与SE…...

C语言复习概要(四)
本文 1. 操作符的分类算术操作符关系操作符逻辑操作符 2. 二进制制和进制转换二进制与十六进制的表示进制转换算法 3. 原码、反码和补码原码反码补码 1. 操作符的分类 C语言中的操作符种类繁多,常用的主要操作符可以按照其功能进行如下分类: 算术操作符…...
【楚怡杯】职业院校技能大赛 “Python程序开发”数据清洗练习
题目: 将书名为‘一级建造师 2020教材 2020版一级建造师 建筑工程管理与实务’的作者(空值)改为 全国一级建造师执业资格考试用书编写委员会,‘出版日期’改为‘2020-05-01’将书名为‘中国共产党简史(32开࿰…...

重学SpringBoot3-集成Redis(五)之布隆过滤器
更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-集成Redis(五)之布隆过滤器 1. 什么是布隆过滤器?基本概念适用场景 2. 使用 Redis 实现布隆过滤器项目依赖Redis 配置…...

BGP路由原理详解
🐣个人主页 可惜已不在 🐤这篇在这个专栏 华为_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 一. BGP简介: 二. BGP报文中的角色 BGP的报文 BGP处理过程 BGP有限状态机 BGP属性 三. BGP作用 四. BGP选路 …...

Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型)
Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型) 目录 Pytorch实现心跳信号分类识别(支持LSTM,GRU,TCN模型) 1. 项目说明 2. 数据说明 (1)心跳信号分类预测数据集 3. 模型训练 (1)项目安装 &am…...

AI股市预测的可参考价值有几何?
1. AI技术在股市预测中的应用 首先,AI技术在股市预测中的应用主要包括机器学习、深度学习、自然语言处理(NLP)和量化金融模型等。机器学习算法能够处理和分析大量的金融数据,从中寻找模式和规律。而深度学习特别是在处理复杂的非线…...
【大数据应用开发】2023年全国职业院校技能大赛赛题第02套
需要技能竞赛软件测试资料的同学们可s聊我,详细了解 目录 任务A:大数据平台搭建(容器环境)(15分) 任务B:离线数据处理(25分 任务C:数据挖掘(10分…...

2. 将GitHub上的开源项目导入(clone)到(Linux)服务器上——深度学习·科研实践·从0到1
目录 1. 在github上搜项目 (以OpenOcc为例) 2. 转移到码云Gitee上 3. 进入Linux服务器终端 (jupyter lab) 4. 常用Linux命令 5. 进入对应文件夹中导入项目(代码) 注意:系统盘和数据盘 1. 在github上搜项目 (以OpenOcc为例) 把链接复制下…...

毕业设计项目——基于transformer的中文医疗领域命名实体识别(论文/代码)
完整的论文代码见文章末尾 以下为核心内容 摘要 近年来,随着深度学习技术的发展,基于Transformer和BERT的模型在自然语言处理领域取得了显著进展。在中文医疗领域,命名实体识别(Named Entity Recognition, NER)是一项重要任务,旨…...
电子信息类专业技术学习及比赛路线总结(大一到大三)
本文主要是总结到目前为止电子信息类的专业技能、比赛路线,以后会持续更新,希望能为那些热爱电子技术或渴望学习课本之外知识的小伙伴们提供帮助,参加学科竞赛和找工作必备。(毕竟很多课本上的内容都没什么用 ) 1.单片…...
怎么将bash(sh)的所有输出保存到log/txt中?
tee 命令 这会将所有输出同时显示在屏幕上并追加到日志文件中。 bash your_script.sh 2>&1 | tee -a log_file.txt 其他方法不可用 只使用 >> 不会将除了print之外的所有保存 bash your_script.sh >> log_file.txt >> 和 2>&1一起只会保存在日…...
腾讯云服务器上使用Nginx部署的静态网站打开速度慢的原因分析及优化解决方案
目录 前言1. 网站打开速度慢的原因分析1.1 服务器配置不足1.2 网络延迟1.3 Nginx配置不合理1.4 静态资源未优化 2. 网站速度的测试与分析2.1 使用浏览器开发者工具分析2.2 在线工具测试 3. 网站优化的具体方法3.1 服务器配置优化3.2 CDN加速与DNS优化3.3 优化Nginx配置3.3.1 启…...

如何移除 iPhone 上的网络锁?本文筛选了一些适合您的工具
您是否对 iPhone 运营商的网络感到困惑?不用担心,我们将向您介绍 8 大免费 iPhone 解锁服务。这些工具可以帮助您移除 iPhone 上的网络锁,并使您能够永久在网络上使用您的设备。如果您想免费解锁 iPhone,请阅读本文并找到最适合您…...

深度学习:CycleGAN图像风格迁移转换
目录 基础概念 模型工作流程 循环一致性 几个基本概念 假图像(Fake Image) 重建图像(Reconstructed Image) 身份映射图像(Identity Mapping Image) CyclyGAN损失函数 对抗损失 身份鉴别损失 Cyc…...
pytorch和yolo区别
PyTorch与YOLO的区别:一个简明的科普 在深度学习的领域,有许多工具和框架帮助研究人员和开发者快速实现复杂的模型。其中,PyTorch与YOLO(You Only Look Once)是两个非常重要的名词。本文旨在探讨这两个技术之间的区别&…...

使用树莓派搭建音乐服务器
目录 引言一、搭建Navidrome二、服务穿透三、音流配置 引言 本人手机存储空间128G,网易云音乐6个G,本就不富裕的空间更是雪上加霜,而且重点是,我根本没有听几首歌,清除缓存后,整个软件都还是占用了5个G左右…...

深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...

MySQL:分区的基本使用
目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区(Partitioning)是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分(分区)可以独立存储、管理和优化,…...

恶补电源:1.电桥
一、元器件的选择 搜索并选择电桥,再multisim中选择FWB,就有各种型号的电桥: 电桥是用来干嘛的呢? 它是一个由四个二极管搭成的“桥梁”形状的电路,用来把交流电(AC)变成直流电(DC)。…...
DAY 26 函数专题1
函数定义与参数知识点回顾:1. 函数的定义2. 变量作用域:局部变量和全局变量3. 函数的参数类型:位置参数、默认参数、不定参数4. 传递参数的手段:关键词参数5 题目1:计算圆的面积 任务: 编写一…...

深入解析光敏传感技术:嵌入式仿真平台如何重塑电子工程教学
一、光敏传感技术的物理本质与系统级实现挑战 光敏电阻作为经典的光电传感器件,其工作原理根植于半导体材料的光电导效应。当入射光子能量超过材料带隙宽度时,价带电子受激发跃迁至导带,形成电子-空穴对,导致材料电导率显著提升。…...

OPENCV图形计算面积、弧长API讲解(1)
一.OPENCV图形面积、弧长计算的API介绍 之前我们已经把图形轮廓的检测、画框等功能讲解了一遍。那今天我们主要结合轮廓检测的API去计算图形的面积,这些面积可以是矩形、圆形等等。图形面积计算和弧长计算常用于车辆识别、桥梁识别等重要功能,常用的API…...

项目进度管理软件是什么?项目进度管理软件有哪些核心功能?
无论是建筑施工、软件开发,还是市场营销活动,项目往往涉及多个团队、大量资源和严格的时间表。如果没有一个系统化的工具来跟踪和管理这些元素,项目很容易陷入混乱,导致进度延误、成本超支,甚至失败。 项目进度管理软…...