进程/线程/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…

IntelliJ IDEA 常用快捷键-个人查阅

Ctrl快捷键 介绍 Ctrl F 在当前文件进行文本查找 (必备) Ctrl R 在当前文件进行文本替换 (必备) Ctrl Z 撤销 (必备) Ctrl Y 删除光标所在行 或 删除选中的行 (必备&#x…

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 这些传统数据库。这些数据库产…

读取Excel的工具类——ExcelKit

文章目录 ExcelKit工具类1、准备工作1.1、SheetInfoVo1.2、BizException 2、读取xlsx3、读取xls4、完整的ExcelKit.java源码 ExcelKit工具类 1、准备工作 1.1、SheetInfoVo import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor;import …

太极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;标记将被放置在…

【23种设计模式】接口隔离原则

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

电脑视频怎么转音频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,上述代码就…

RabbitMQ 链接管理-发布者-消费者

RabbitMQ连接管理器 using RabbitMQ.Client; using System; public class RabbitMQConnectionManager { private readonly IConnectionFactory _connectionFactory; private IConnection _connection; public RabbitMQConnectionManager(string hostName) { …

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 是两个非常有用的工具。下面将介绍如何使…

Python分享之多进程探索 (multiprocessing包)

在初步了解Python多进程之后&#xff0c;我们可以继续探索multiprocessing包中更加高级的工具。这些工具可以让我们更加便利地实现多进程。 进程池 进程池 (Process Pool)可以创建多个进程。这些进程就像是随时待命的士兵&#xff0c;准备执行任务(程序)。一个进程池中可以容…

CSS外边距重叠:原理、结果

引言 CSS中的外边距是控制元素间距的重要属性之一。然而&#xff0c;当涉及到相邻元素的外边距时&#xff0c;可能会出现外边距重叠的情况&#xff0c;这可能会对页面布局产生一些意想不到的影响。本文将深入探讨什么是外边距重叠以及它可能导致的结果&#xff0c;并提供一些代…

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

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

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

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

sprinbboot 2.7启动不生成日志文件

新增了一个springboot项目&#xff0c;通过idea 调试&#xff0c;并且在idea 的vm options中指定-Dlogging.configclasspath:logback-pro.xml 或者 -Dlogging.configclasspath:logback-dev.xml 都能正常生成对应的日志文件。 部署到测试环境以及生产环境&#xff0c;日志文件却…