进程和线程的区别和联系

2023-10-29

一、简介

进程:

进程是操作系统资源分配的基本单位, 进程是指正在运行的程序实例。每个进程都有自己的内存空间、代码、数据和资源。操作系统通过管理进程来控制计算机的资源分配。每个进程都有一个唯一的标识符,称为进程 ID,以便操作系统可以识别和管理它。进程可以与其他进程通信,并且可以启动其他进程以执行不同的任务。。

多进程:

在操作系统中可以同时运行多个程序。

线程:

是操作系统进行运算调度的基本单位,它被包含在进程之中,是进程中的实际运作单位,一条线程指的是进程中一个单一顺序的控制流。一个进程可以并发多个线程,每条线程并行执行不同的任务。

多线程:

在一个应用程序中可以同时执行多个功能,例如迅雷中可以同时执行多个下载任务旧是多线程。

特性:

1、一个进程可以包含多个线程。

2、一个线程必须属于某个线程,进程是线程的容器。

3、一个进程中的多个线程共享该进程中的所有资源。

CPU时间片:

CPU时间片是计算机中操作系统调度程序所使用的一种时间分配机制。它是指操作系统将CPU轮流分配给各个进程或线程执行一定时间的长度,每个时间长度被称为一个时间片。在时间片内,进程或线程可以执行自己的任务,并在时间片结束后交出CPU,等待下一轮调度。通过使用CPU时间片,操作系统可以使多个进程或线程并发执行,从而提高系统的效率。同时,由于操作系统可以在时间片结束后及时切换到下一个进程或线程,避免了某个进程或线程长时间占用CPU而导致其他进程或线程无法执行的情况。

1、从表面上看各个程序是同时运行的,实际上CPU在同一时间只能执行一个程序。

2、只是CPU在很短的时间内,在不同程序间切换。轮流执行每个程序,执行速度很快,所以感觉上像是同时在运行。

二、创建线程

五种方式:
1、继承Thread类

2、实现Runnable接口

3、继承Thread类  使用匿名内部类

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

5、使用lambda表达式

1、继承Thread类

步骤:

1、定义一个类,继承自Thread类,重写run()方法。

2、创建该类的实例,即创建一个线程。

3、调用start()方法,启动线程()(不能直接调用run()方法)。

//继承Thread类
class MyThread extends Thread{
    @Override
    public void run() {
        while (true){
            System.out.println("hello t");
        }
    }
}

public class ThreadDome1 {
    public static void main(String[] args) {
        Thread t = new MyThread();
        t.start();

        while (true){
            System.out.println("hello main");
        }
    }
}

2、实现Runnable接口

步骤:1、定义一个类,实现Runnable接口,实现run()方法。

2、创建实现类的实例。

3、创建Thread类的一个实例,将上一步中实现类的实例传入

4、调用start()方法,启动线程

//实现Runnable接口
class MyRunnable implements Runnable{
    @Override
    public void run() {
        while (true) {
            System.out.println("hello t");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

public class ThreadDome2 {
    public static void main(String[] args) {
        MyRunnable myRunnable = new MyRunnable();
        Thread t = new Thread(myRunnable);
        t.start();

        while (true){
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

3、继承Thread类 使用匿名内部类

public class ThreadDome3 {

    public static void main(String[] args) {
        Thread thread = new Thread(){
            @Override
            public void run() {
                while (true){
                System.out.println("hello t");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                }
            }
        };
        thread.start();

        while (true){
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

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

public class ThreadDome4 {
    public static void main(String[] args) {
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {
                while (true) {
                    System.out.println("hello t");
                    try {
                        Thread.sleep(1000);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        });

        thread.start();
        while (true){
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    }
}

5、使用lambda表达式

public class ThreadDome5 {
    public static void main(String[] args) {
        Thread t = new Thread( () ->{
            while (true){
                System.out.println("hello t");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        } );
        t.start();
        System.out.println(t.getName());
        while (true){
            System.out.println("hello main");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

3、线程和进程的关系以及区别

进程和线程的关系:

(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。 (2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 (3)处理机分给线程,即真正在处理机上运行的是线程。 (4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。线程是指进程内的一个执行单元,也是进程内的可调度实体.

进程与线程的区别:

(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

进程和线程的区别和联系 的相关文章

  • 如何使用 Apache POI API 将图像添加到 pptx 中添加的图像占位符?

    我已经预定义了带有文本和图像占位符的 pptx 模板 我如何从模板访问和修改这些占位符 我可以使用 POI pptx API 直接将图像和文本添加到幻灯片中 但如何将其添加到模板的占位符中 请参阅链接以了解如何添加占位符来创建固定模板 ht
  • 如何使用 Java 中的 Web 服务(例如 Axis2)发送复杂对象的数组或集合?

    我对 SOAP Web 服务还比较陌生 虽然我完成了一些较小的 Web 服务项目 但我偶然从来不需要返回 或用作参数 复杂 对象的数组或集合 当我尝试这样做时 根据我的 SOAP 绑定风格 我会得到不同的奇怪行为 当我使用RPC 文字 我可
  • 在文本文件中写入多行(java)

    下面的代码是运行命令cmd并使用命令行的输出生成一个文本文件 下面的代码在 Eclipse 的输出窗口中显示了正确的信息 但在文本文件中只打印了最后一行 谁能帮我这个 import java io public class TextFile
  • SAML 服务提供商 Spring Security

    当使用预先配置的服务提供者元数据时 在 Spring Security 中 是否应该有 2 个用于扩展元数据委托的 bean 定义 一份用于 IDP 元数据 一份用于 SP 元数据
  • Java AES 128 加密方式与 openssl 不同

    我们遇到了一种奇怪的情况 即我们在 Java 中使用的加密方法会向 openssl 生成不同的输出 尽管它们在配置上看起来相同 使用相同的键和 IV 文本 敏捷的棕色狐狸跳过了懒狗 加密为 Base64 字符串 openssl A8cMRI
  • wait() 在游戏中如何工作?

    在 playframework 的文档中here http www playframework org documentation 1 2 1 asynchronous已写 public static void loopWithoutBlo
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 如何在不超过最大值的情况下增加变量?

    我正在为学校开发一个简单的视频游戏程序 我创建了一个方法 如果调用该方法 玩家将获得 15 点生命值 我必须将生命值保持在最大值 100 并且由于我目前的编程能力有限 我正在做这样的事情 public void getHealed if h
  • 我需要什么库才能在 Java 中访问这个 com.sun.image.codec.jpeg?

    我正在用java创建一个图像水印程序 并导入了以下内容 import com sun image codec jpeg JPEGCodec import com sun image codec jpeg JPEGEncodeParam im
  • 使用 AES SecretKey 的 Java KeyStore setEntry()

    我目前正在 Java 中开发一个密钥处理类 特别是使用 KeyStore 我正在尝试使用 AES 实例生成 SecretKey 然后使用 setEntry 方法将其放入 KeyStore 中 我已经包含了代码的相关部分 The KS Obj
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 很好地处理数据库约束错误

    再一次 它应该很简单 我的任务是在我们的应用程序的域对象中放置一个具有唯一约束的特定字段 这本身并不是一个很大的挑战 我刚刚做了以下事情 public class Location more fields Column unique tru
  • 欧洲中部时间 14 日 3 月 30 日星期五 00:00:00 至 日/月/年

    我尝试解析格式日期Fri Mar 30 00 00 00 CET 14至 日 月 年 这是我的代码 SimpleDateFormat formatter new SimpleDateFormat dd MM yyyy System out
  • 如何知道抛出了哪个异常

    我正在对我们的代码库进行审查 有很多这样的陈述 try doSomething catch Exception e 但我想要一种方法来知道 doSomething 抛出了哪个异常 在 doSomething 的实现中没有 throw 语句
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • Java中的Object类是什么?

    什么是或什么类型private Object obj Object http download oracle com javase 6 docs api java lang Object html是Java继承层次结构中每个类的最终祖先 从
  • ServletContainer 类未找到异常

    我无法再编译我的球衣项目 并且出现以下异常 GRAVE Servlet Project API threw load exception java lang ClassNotFoundException com sun jersey spi
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个
  • 带有 Maven Wrapper 的 Java 17 导致无法识别的 VM 选项“MaxPermSize=512m”

    I use OpenJDK 17 https jdk java net 17 使用 Maven Wrapper 3 8 2 从春季初始化 https start spring io Maven项目 JAR打包 Java 17 Spring

随机推荐

  • multisim仿真 74LS148D级联芯片

    multisim仿真 74LS148D级联芯片
  • 随机密码生成(Python编程)

    一 问题描述 编写程序 在26个字母大小写和9个数字组成的列表中随机生成10个8位密码 二 问题分析 因为要在列表中随机生成密码 故需要将26个大 小写字母和9个数字存放在同一个列表中 首先使用string模块中的ascii letters
  • win10+rtx2070+tensorflow-gpu-1.9.0环境搭建

    最近实验室新到一台工作站 配备了两块rtx2070 但为方便使用其他科研软件 只能使用win10 为学习深度有趣 人工智能实战项目合集 需安装TensorFlow 1 9 0环境 win10下搭建深度学习环境首推基于Anaconda的办法
  • Doxygen安装和使用

    1 简介 Doxygen是一个文本生成工具 用于为源码生成说明文档 我们可以在代码中按照 Doxygen 要求的语法编写代码注释 然后使用 Doxygen 将程序中的注释提取出来生成一个文档 我们一般都把注释写在代码中 所以使用 Doxyg
  • 华为手机怎样才算激活了_华为手机还是“副业”?占总营收近半,手机销售才是主力军...

    只要提起华为 很多人的第一想法绝对是手机 不可否认近年来华为在手机业务上取得的成绩 从过去的籍籍无名到如今无论是国内还是国外 都已经声名远扬 华为手机业务的发展可谓是非常的迅速 值得一提的是 2019年华为手机的市场份额已经跃居成为了全球第
  • 无线数据采集器

    背景介绍 近年来 软硬件技术的革新带动了物联网行业的发展 趋使其应用场景不断深化 从工业设备故障诊断到共享经济 再到新能源汽车 调研发现 物联网的核心框架为 通过传感器感知物理世界的状态 后续利用数据采集装置对信息进行量化并上传到云平台 最
  • ld.so分析5 _dl_start

    ld so分析5 dl start 2010 05 06 08 53 24 分类 LINUX ld so分析5 dl start 对于不关心的地方 我们都 或 注释掉 1 dl start中的变量声明 static Elf32 Addr 我
  • SpringBoot中如何整合Swagger2呢?

    转自 SpringBoot中如何整合Swagger2呢 下文笔者讲述SpringBoot中整合Swagger2的方法分享 如下所示 Swagger简介 Swagger用于自动生成Restful接口说明文档工具 在前后端分离时 后端可直接使用
  • Java字符串的字符进行排序

    要求 对 abc fcc egfd asd rtgh deghk fcc 字段进行排序 要求满足其为升序排列同时每个字符串里也是升序排列 思路 方法1 冒泡排序 思路 先获取字符串数组里的每个字符串 然后使用toCharArray 方法得到
  • 详解停车位检测论文:Attentional Graph Neural Network for Parking-slot Detection

    本文介绍一篇注意力图神经网络用于停车位检测论文 论文已收录于 RA L2021 在之前的基于卷积神经网络的停车位检测方法中 很少考虑停车位标记点之间的关联信息 从而导致需要复杂的后处理 在本文中 作者将环视图中的标记点看作图结构数据 使用图
  • Pyspark案例综合(数据计算)

    数据计算 map方法 map算子 map算子 成员方法 接受一个处理函数 可用lambda快速编写 对RDD内的元素一一处理 返回RDD对象 链式调用 对于返回值是新的RDD的算子 可以通过链式调用的方式多次调用算子 演示RDD的map成员
  • IE命令行参数

    Windows Internet Explorer includes several command line options that enable you to troubleshoot and configure the browse
  • Chrome开发者工具详解(一)

    Chrome开发者工具详解 一 前言 一 打开开发者工具方法 二 面板常用方法 1 Elements面板 2 Network 面板 总结 前言 Chrome浏览器中内置了一套强大的开发者工具 学会使用Chrome开发者工具对web网站进行静
  • window10下conda使用报错:An unexpected error has occurred. Conda has prepared the above report.

    在我使用anaconda3创建环境 跑实验时 把镜像三搞两搞 搞出了问题 卡死了 An unexpected error has occurred Conda has prepared the above report 网上找了好多方法都没
  • 百度2015年系统工程师笔试题:设计一个小程序来判断当前机器的字节序怕【详解】

    目录 设计思路 代码实现 设计思路 首先 我们要了解需要判断的东西是什么 这就需要我们了解大小端的概念 大端 存储 模式 是指数据的低位保存在内存的高地址中 而数据的高位 保存在内存的低地址 中 小端 存储 模式 是指数据的低位保存在内存的
  • linux globbing文件通配符

    在linux中使用ls cp mv rm等命令时可以使用文件通配符匹配操作多个文件 匹配模式 匹配任意长度的任意字符 匹配任意单个字符 匹配指定范围内的任意单个字符 文件通配不区分字母的大小写 匹配非制定范围内的任意单个字符 特殊格式 up
  • 使用jsoup爬取小说

    1 开局扯犊子 最近正在学习Java爬虫技术 于是乎接触到了jsoup这个东西 继爬取美女图片后的第二个小项目 爬取笔趣阁小说 2 页面分析 首先我们进入笔趣阁选择一本喜欢的小说 f12后拿到他的title与每一章的地址 然后我们继续分析进
  • 【Hive】Hive元数据库介绍及信息查看

    转载 dabokele 在安装Hive时 需要在hive site xml文件中配置元数据相关信息 与传统关系型数据库不同的是 hive表中的数据都是保存的HDFS上 也就是说hive中的数据库 表 分区等都可以在HDFS找到对应的文件 这
  • 冒泡排序 例题:给出一组数将这组数按从小到大的顺序输出出来

    冒泡排序 例题 给出一组数将这组数按从小到大的顺序输出出来 学习笔记 方便自己日后复习 也可供大家参考学习 冒泡排序百度上是这样定义的 冒泡排序 它重复的走访过要排序的元素列 依次比较两个相邻元素 如果他们的顺序 如从大到小 首字母从A到Z
  • 进程和线程的区别和联系

    一 简介 进程 进程是操作系统资源分配的基本单位 进程是指正在运行的程序实例 每个进程都有自己的内存空间 代码 数据和资源 操作系统通过管理进程来控制计算机的资源分配 每个进程都有一个唯一的标识符 称为进程 ID 以便操作系统可以识别和管理