进程/线程/PCB

进程:正在运行中的程序(进程是驻留在内存中的)

  • 是系统执行资源分配和调度的独立单位
  • 每一个进程都有属于自己的存储空间和系统资源
  • 注意:进程A 和 进程B 的内存独立不共享

使用jdk自带的工具,jconsole查看当前Java进程中的所有线程。

        new Thread对象,操作不创建线程。(说的线程指的是 系统内核里的PCB)

        调用start才是创建PCB,才是有货真价实的线程的。 

线程:进程中的单个顺序控制流,也可以理解成是一条执行路径。

  • 单线程:一个进程中包含一个顺序控制流(一条执行路径)
  • 多线程:一个进程中包含多个顺序控制流(多条执行路径)
  • 在java中:线程A和线程B,堆内存和方法区内存共享。但是栈内存独立,一个线程一个栈。
  • 多线程:为了提高程序的处理效率。
  • 对于单核的CPU来说,不能够做到真正的多线程并发,但是可以做到给人一种“多线程并发“的感觉。对于单核的CPU来说,在某一个时间点上实际上只能处理一件事情,但由于CPU的处理速度极快,多个线程之间频繁切换执行,给人的感觉是多个事情同时在做。

PCB(Process Control Block)进程控制块:描述控制进程的运行,系统中存放进程的管理和控制信息和数据结构。 

PCB一般包括: 

  • 进程ID(PID、进程句柄):它是唯一的,一个进程都必须对应一个PID。
  • 特征信息:一般分系统进程、用户进程、或者内核进程等。
  • 进程状态:运行、就绪、阻塞、表示进程现的运行情况。
  • 优先级:表示获得CPU控制权的优先级大小。
  • 通信信息:进程之间的通信关系的反映,由于操作系统会提供通信信道。
  • 线程保护区:保护阻塞的进程用
  • 资源需求、分配控制信息
  • 进程实体信息:指明程序路径和名称,进程数据在物理内存还是在交换分区中
  • 其他信息:工作单位、工作区、文件信息等。

同一个进程里的若干个PCB pid相同。不同进程的pid是不同的 

PCB不是”简称“是一个数据结构,体现的是 进程/线程是如何实现的,如何被描述的。

        PCB对应的是线程

        一个线程对应多个PCB        

        如果一个进程只有一个线程,就是一个进程对应一个PCB了。

线程安全问题:罪魁祸首——抢占式执行,随机调度。

本质上还是系统里的线程的封装,每个Thread的对象就对应到系统中的一个线程,也就是PCB

start 和 run 区别:

  • start是真正创建了一个线程(从系统这里创建的)
  • run 知识描述了线程要干的活是啥,如果直接在main中调用run,此时没有创建新线程,全是main线程一个人干的活。

进程和线程:

进程包含线程,要想看到线程,要先找到对应的进程,再看进程里有哪些线程。

实现线程方法

1、继承Thread,重写 run 

接口比抽象类更进一步,抽象类接口则不行,要求方法都是抽象方法。

2、实现Runnable接口 实现一个interface

解耦合,目的就是为了让线程和线程要干的活 之间分离开。

未来改代码,不用多线程,或者线程池,或者协程……此时代码改动较小。

3、使用匿名类,继承Thread

        创建了一个Thread的子类。(子类没有名字)所以才叫做匿名。

        创建了子类的实例,并且让 t 引用执行实例

4、使用匿名内部类,实现Runnable

        这个写法和2本质相同,只不过把实现Runnable任务交给匿名内部类的语法。

        此处是创建了一个类,实现了Runnable,同时创建了类的实例,并且传给Thread的构造方法。

5、使用Lambda表达式(最简单,推荐写法)

        把任务Lambda表达式来描述

        直接把Lambda传给Thread构造方法

        (匿名内部类被重写方法的形参列表)-> {

                        被重写方法的方法体代码

          }

        lambda 表达式只能简化函数式接口匿名内部类的写法形式,且接口中有且仅有一个抽象方法

        上述方法,只是语法规则不同,本质上都是一样的方式,这些方式创建处理啊的线程都是一样的。

抽象类与普通类的区别

  • 抽象类不能实例化,不能new
  • 必须要搞个子类,来继承抽象类
  • 抽象类里还有抽象方法,抽象方法没有方法体,需让子类重写 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/119824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 编译安装 nginx

CentOS 编译安装 nginx 修改 yum 源地址为 阿里云 curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repoyum makecache升级内核和软件 yum -y update安装常用软件和依赖 yum -y install gcc gcc-c make cmake zlib zlib-devel openss…

electron27+react18集成搭建跨平台应用|electron窗口多开

基于Electron27集成React18创建一个桌面端exe程序。 electron27-vite4-react18基于electron27结合vite4构建工具快速创建react18跨端应用实践。 版本列表 "vite": "^4.4.5" "react": "^18.2.0" "electron": "^27.0.1&…

CloudQuery + StarRocks:打造高效、安全的数据库管控新模式

随着技术的迅速发展,各种多元化的数据库产品应运而生,它们不仅类型众多,而且形式各异,国产化数据库千余套,开源数据库百余套 OceanBase 、PolarDB 、StarRocks…还有一些像 Oracle、MySQL 这些传统数据库。这些数据库产…

太极v14.0.4 免ROOT用Xposed

一个帮助你免 Root、免解锁免刷机使用 Xposed 模块的 APP 框架。 模块通过它改变系统和应用的行为,既能以传统的 Root/ 刷机方式运作, 也能免 Root/ 免刷机运行;并且它支持 Android 5.0 ~ 11。 简单来说,太极就是个 Xposed 框架…

2024线性代数复习——矩阵代数

相似矩阵:存在可逆矩阵 P P P,使得 P − 1 A P B P^{-1} A PB P−1APB,则称矩阵 A A A, B B B 相似,特征值相等。注意只有相似矩阵 B B B 是对角阵,我们才说它是可以相似对角化的。 A A A 可以相似对角…

vue 复杂的流程图实现--antv/g6

可以先看下对应的文档&#xff1a;G6 Demos - AntV npm install --save antv/g6 实现如图&#xff1a; <template><div class"drawflow"><div id"mountNode"></div></div> </template> <script> import G6 fr…

Qwt QwtPlotMarker标记类详解

1.概述 QwtPlotMarker类是Qwt绘图库中用于在图表上绘制标记的类。标记可以是垂直或水平线、直线、文本或箭头等。它可用于标记某个特定的位置、绘制参考线或注释信息。 以下是类继承关系图&#xff1a; 2.常用方法 设置标记的坐标。传入x和y坐标值&#xff0c;标记将被放置在…

电脑视频怎么转音频mp3

如果你在电脑上观看视频时喜欢上某个片段的背景音乐&#xff0c;且想将喜欢的背景音乐制作为手机铃声。我是建议你将此视频转换为 MP3 格式&#xff0c;因为 MP3 几乎与所有设备相兼容&#xff0c;让你可以在不同设备上不受限制地去聆听它。那该如何转换呢&#xff1f;无需担心…

vue路径中“@/“代表什么

举例&#xff1a; <img src"/../static/imgNew/adv/tupian.jpg"/>其中&#xff0c;/是webpack设置的路径别名&#xff0c;代表什么路径&#xff0c;要看webpack的build文件夹下webpack.base.conf.js里面对于是如何配置&#xff1a; 上图中代表src,上述代码就…

LayerUI中按钮点击一次,触发了两次事件

form.on("submit(clericalServices)", function (data) {console.log("1111111");var getTpl clericalServicesT.innerHTML;laytpl(getTpl).render({}, function (html) {$("#type1Scope").append(html);});return false})点击一次&#xff0c;…

构建自动化测试环境:使用Docker和Selenium!

随着软件开发的日益复杂和迭代速度的加快&#xff0c;自动化测试被越来越广泛地应用于软件开发流程中。它能够提高测试效率、减少测试成本&#xff0c;并保证软件质量的稳定性。在构建自动化测试环境方面&#xff0c;Docker 和 Selenium 是两个非常有用的工具。下面将介绍如何使…

7-4、S加减速转动实现【51单片机控制步进电机-TB6600系列】

摘要&#xff1a;本节介绍实现步进电机S曲线运动的代码 一、目标功能 实现步进电机转动总角度720&#xff0c;其中加减速各90 加速段&#xff1a;加速类型&#xff1a;S曲线   加速角度&#xff1a;角度为90   起步速度&#xff1a;30RPM&#xff0c;   终止速度&#x…

【数智化人物展】同方有云联合创始人兼总经理江琦:云计算,引领数智化升级的动能...

江琦 本文由同方有云联合创始人兼总经理江琦投递并参与《2023中国企业数智化转型升级先锋人物》榜单/奖项评选。 数据智能产业创新服务媒体 ——聚焦数智 改变商业 在这个飞速发展的数字时代&#xff0c;我们置身于一个前所未有的机遇与挑战并存的时刻。数字化转型不再仅仅是一…

ChinaSoft 论坛巡礼 | 开源软件生态健康度量论坛

2023年CCF中国软件大会&#xff08;CCF ChinaSoft 2023&#xff09;由CCF主办&#xff0c;CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办&#xff0c;将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

jmeter疑难杂症

mac启动jmeter 进入jmeter文件夹下的bin目录 执行sh jmeter 如何线程与线程之间按照顺序执行 线程组内随机执行 选择线程组右键 >>> 添加 >>> 逻辑控制器 >>> 随机顺序控制器&#xff08;Random Order Controller&#xff09; 如何提取cookie的…

Qt中的单例模式

QT单例类管理信号和槽函数 Chapter1 Qt中的单例模式一、什么是单例模式&#xff1f;二、Qt中单例模式的实现2.1、静态成员变量2.2、静态局部变量2.3、Q_GLOBAL_STATIC 宏实例2 三、使用场景四、注意事项 Chapter2 QT单例类管理信号和槽函数一、创建单例类二、主界面添加组件三、…

图像去噪滤波算法汇总(Python)

前言 上篇文章&#xff1a;图像数据噪音种类以及Python生成对应噪音&#xff0c;汇总了常见的图片噪音以及噪音生成方法&#xff0c;主要用在数据增强上面&#xff0c;作为数据集填充的方式&#xff0c;可以避免模型过拟合。想要了解图像数据增强算法的可以去看本人所撰这篇文…

多线程的学习01

什么是线程 线程是为了解决并发编程引入的机制&#xff0c;线程相比进程来说更轻量。 创建线程比创建进程——开销更小 销毁线程比销毁进程——开销更小 调度线程比调度进程——开销更小 进程包含线程&#xff0c;同一进程里的若干线程之间&#xff0c;共享着内存资源和文件描…

8.稳定性专题

1. anr https://code84.com/303466.html 一句话&#xff0c;规定的时间没有干完要干的事&#xff0c;就会发生anrsystem_anr场景 input 5sservice 前台20s 后台60scontentprivider超市 比较少见 原因 主线程耗时 复杂layout iobinder对端block子线程同步锁blockbinder被占满导…

C语言重点突破(四)自定义类型详解

前言 本文意在介绍C语言里的常规自定义类型&#xff0c;它是C语言里最重要的概念之一&#xff0c;是我们从简单使用C语言到综合运用必不可少的知识之一&#xff0c;在C语言中具有重要的地位和作用&#xff0c;掌握自定义类型的使用方法和技巧对于写出高质量的C程序是非常重要的…