iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >JavaEE的进程,线程和创建线程的5种方式详解
  • 627
分享到

JavaEE的进程,线程和创建线程的5种方式详解

2024-04-02 19:04:59 627人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录一、认识进程、线程 1.1什么是进程进程的调度并发式执行1.2认识线程1.3进程、线程之前的区别和联系(面试题)创建线程的几种方式总结一、认识进程、线程  1

一、认识进程、线程 

1.1什么是进程

进程process/task.“进程"是计算机完成一个工作的"过程”

设备上一个正在运行的程序,就是一个进程。比如你打开的QQ就是一个进程,正在和别人聊天的微信也是一个进程。进程是系统进行资源分配的基本单位。

当我们打开任务管理器就可以看到,当前操作系统中正在运行的进程。

在这里插入图片描述

要想让一个进程真正的运行起来,就需要给这个进程分配一定的系统硬件资源。这些资源都包括:

CPU:例如我电脑中任务管理器占用了11%的CPU,QQ占用0.3%。

内存:任务管理器占用了45.7MB。Microsoft Edge占用了320.0MB

磁盘:qq使用的了0.2MB/秒。

网络带宽…

在举一个例子:我是班长,老师想让我组织一个活动,我要想组织这个活动,我就需要向老师申请一些活动经费、人员调用。这里我就相当于进程。老师就是CPU。我组织活动的时候向老师申请经费、人。就是在请求分配一些资源。有经费,有人才能把活动做好。

进程的管理

管理=描述(PCB)+组织

进程的组织:

使用一定的数据结构来组织。常见的做法是用一双向链表。 当你查看进程列表都有哪些进程时,本质上就是遍历操作系统内核中的这个组织进程的链表,再显示出每个进程的这些属性。创建一个进程,本质上就是创建了一个PCB对象,把这个对象加入到内核的链表中。销毁一个进程,本质上就是把这个PCB对象从内核链表中删除。

进程的描述:

PCB描述进程。这个PCB实际上是一个非常大的结构体,属性有很多,例如:PID(下表第二列)、内存指针、文件描述符表、进程的状态、上下文、优先级、记账信息等等。

PID: 一个进程的身份标识,一个机器同一时刻每个进程的PID是唯一的。

内存指针: 描述这个进程使用的内存空间是哪个范围

文件描述附表: 描述这个进程都打开了哪些文件

在这里插入图片描述

进程的调度

说到进程,就会涉及到进程的调度,刚才可以看到我电脑上的进程是非常多的,虽然应用那里只显示了5个,但是后台还是帮我运行了87个进程。相信大家的电脑一定没有这么多CPU吧。CPU数目是少于进程数目的,但是我又需要让那些进程“同时执行”。我们的系统是支持多任务的系统。而这个多任务系统其实就是基于进程调度这样的机制来完成的。

并发式执行

举个例子:假设有小张同学,他长的很好看,在学校里有很多的追求者。 按正常男人的标准,我同时只能和一个女生交往~

那小张同学有没有办法做到同时和多个女生交往呢? 小张同学前思后想,最终决定!安排一个时间表!!!

周一早上:和A女生一起吃早饭

周二下午:和B女生一起逛街

周三晚上:和C女生一起看电影

只要小张把时间表安排好,这三个女生就不会知道其他两个人的存在。

从宏观上来看,(一年)小张同学同时和三个女生交往。渣男

从微观上来看,(一天)小张同学同一时刻只是和一个女生交往。好男人。

换到电脑上操作系统就是这样管理进程的。

只不过现实中CPU运行速度太快,我们感受不到。我们觉得好像CPU是同时在运行这么多进程一样。

进程的优先级:安排时间表的时候优先给谁安排

进程的上下文:将寄存器的信息保存到内存中。记录上次运行到哪个指令,下次再调度的时候就可以很方便的继续从这个位置执行。可以理解为单机游戏的存档,读档。

进程的记账信息:记录这个进程在CPU上执行了多久,用来辅助决定这个进程是否要继续执行还是说要调度出去。

1.2认识线程

为什么需要线程?

我们引入进程的目的,就是为了能够"并发编程"。为了同时运行多个程序,虽然多进程已经能够并发进程了,但是多进程还是有一定的提升空间。

创建进程、销毁进程、调度进程这些操作的开销有点太大了。 为此,引入了线程。

线程

Thread,在有些系统上也叫做"轻量级进程"。为什么说它轻量呢?

创建线程比创建进程更高效;

销毁线程比销毁进程更高效;

调度线程比调度进程更高效;

因为创建线程并没有申请资源,销毁线程也不需要释放资源。直接让线程产生在进程内部,公用之前的资源。

线程和进制是包含的关系。一个进程可以包含多个线程或者一个线程。当创建进程之后,就相当于把资源都分配好了,接着在这个进程里面创建线程,这样的线程就和之前的进程公用一样的资源了。

1.3进程、线程之前的区别和联系(面试题)

1、进程是操作系统资源分配的基本单位,线程是操作系统调度执行的基本单位。

2、进程是包含线程的,一个进程可以含有多个线程,也可以含有一个线程。

3、每个进程都有独立的内存空间(虚拟地址空间),同一个进程的多个线程之间,公用这个虚拟地址空间。

创建线程的几种方式

1、创建自定义类继承Thread类重写run方法


public class threadDemo1 {
    public static void main (String[] args) {
        Thread t=new Thread ();
    //start方法就会在操作系统中创建一个线程出来。
        t.start ();
    }
}
class MyThread extends Thread{
@Override
public void run(){
    System.out.println ("继承Thread类创建线程");
}

}

2、实现Runable接口,重写run方法

public class threadDemo2 {
    public static void main (String[] args) {
        Thread T=new Thread (new myRunable ());
        T.start ();
    }
}
class  myRunable implements  Runnable{
    @Override 
    public  void run(){
        System.out.println ("实现Runbale接口,重写run");
    }
}

3、继承Thread类重写run方法,使用匿名内部类的方式

   public static void main (String[] args) {
        Thread t=new Thread (){
            @Override
            public  void  run(){
                System.out.println ("匿名内部类");
            }
        };
        t.start ();
    }

4、实现Runable,重写run方法,使用匿名内部类

    public static void main (String[] args) {
    Thread t=new Thread (new Runnable () {
        @Override
        public void run () {
            System.out.println ("实现Runable,重写run,使用匿名内部类");
        }
    });
    t.start ();
}

5、使用lambda表达式

//
Thread t3 = new Thread(() -> System.out.println("使用匿名类创建 Thread 子类对象"));
Thread t4 = new Thread(() -> {
    System.out.println("使用匿名类创建 Thread 子类对象");
});

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: JavaEE的进程,线程和创建线程的5种方式详解

本文链接: https://www.lsjlt.com/news/144467.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • JavaEE的进程,线程和创建线程的5种方式详解
    目录一、认识进程、线程 1.1什么是进程进程的调度并发式执行1.2认识线程1.3进程、线程之前的区别和联系(面试题)创建线程的几种方式总结一、认识进程、线程  1...
    99+
    2024-04-02
  • JavaEE的进程,线程是什么和怎么创建线程
    本篇内容介绍了“JavaEE的进程,线程是什么和怎么创建线程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、认识进程、线程 1....
    99+
    2023-06-29
  • Java的线程与进程以及线程的四种创建方式
    目录问题描述case 代码截图数据库DOcontroller定义dao定义mapper实现mysql相关 properties配置数据库数据测试结果具体错误信息解决总结问题描述 这里...
    99+
    2024-04-02
  • 详解Java创建线程的五种常见方式
    目录Java中如何创建线程呢?1.显示继承Thread,重写run来指定现成的执行代码。2.匿名内部类继承Thread,重写run来执行线程执行的代码。3.显示实现Runnable接...
    99+
    2024-04-02
  • Java线程的三种创建方式
    目录1、Thread2、Runnable和Thread3、Runnable和Thread4、三者对比5、注意项1、Thread 继承Thread类,并重写run方法 class ...
    99+
    2024-04-02
  • 线程的创建方式
    作者简介: zoro-1,目前大二,正在学习Java,数据结构,mysql,javaee等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 线程的创建...
    99+
    2023-12-23
    android java 开发语言
  • java创建多线程的七种方式
    一、继承Thread,重写run方法 通过自定义一个类(这里起名为:MyThread),继承Thread类,重写run方法,最后在main方法中new出MyThread实例,调用这个实例的继承的Thread类的start方法创建一个线程。 ...
    99+
    2023-09-26
    java
  • Java 中创建线程的几种方式
    Java 是一种面向对象的编程语言,它支持多线程编程。多线程编程是指在一个程序中同时运行多个线程,这些线程可以并行执行,以提高程序的效率和性能。Java 提供了多种创建线程的方法,本文将介绍这些方法以...
    99+
    2023-09-13
    java jvm servlet
  • Android中创建子线程的方式详解
    在 Android 中,创建子线程的方式通常有以下几种: 使用 Thread 类进行创建 Thread 是 Java 中的一个类,可以通过继承 Thread 类或者创建 Thread...
    99+
    2023-05-18
    Android创建子线程方式 Android创建子线程 Android子线程
  • Java线程创建的四种方式总结
    多线程的创建,方式一:继承于Thread类 1.创建一个继承于Thread类的子类 2.重写Thread类的run()--->将此线程执行的操作声明在run()中 3.创建Th...
    99+
    2024-04-02
  • Java创建线程的方式解析
    目录继承Thread,这里使用匿名内部类实现Runnable接口,配合Thread类,同样用匿名内部类FutureTask配合Thread继承Thread,这里使用匿名内部类 @Sl...
    99+
    2024-04-02
  • java线程池的四种创建方式详细分析
    目录前言1. 线程池2. 创建方式前言 在讲述线程池的前提 先补充一下连接池的定义 连接池是创建和管理一个连接的缓冲池的技术,这些连接准备好被任何需要它们的线程使用 可以看到其连接池...
    99+
    2024-04-02
  • Linux之线程的创建方式
    目录线程的概念与实现方式线程的实现方式linux系统实现多线程的方式线程和进程的区别多线程开发的三个基本概念线程库的使用线程库中的其他方法线程属性线程属性初始化线程分离总结线程的概念与实现方式 线程是进程内部的一条执行序...
    99+
    2023-03-23
    Linux线程的创建 Linux线程 Linux创建线程
  • Java创建多线程的8种方式集合
    目录1、继承Thread类,重写run()方法2、实现Runnable接口,重写run()3、匿名内部类的方式4、带返回值的线程(实现implements Callable<返...
    99+
    2024-04-02
  • springboot创建线程池的两种方式小结
    目录springboot创建线程池两种方式1.使用static代码块创建2.使用@Configuration @bean注解,程序启动时创建springboot如何开启线程池定义线程...
    99+
    2024-04-02
  • Java多线程的创建方式
    这篇文章主要介绍“Java多线程的创建方式”,在日常操作中,相信很多人在Java多线程的创建方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java多线程的创建方式”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-20
  • 详解Java线程池的使用(7种创建方法)
    目录 1. 固定数量的线程池a.  线程池返回结果b. ⾃定义线程池名称或优先级2. 带缓存的线程池3. 执⾏定时任务 a.&nbs...
    99+
    2023-03-24
    Java线程池 Java线程池使用 线程池
  • 详解_beginthreadex()创建线程
    目录一、使用_beginthreadex()             二、_beginthreadex()与代C...
    99+
    2024-04-02
  • 详解Python中的进程和线程
    进程是什么? 进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据集、进程控制块三部分组成。我们编写的程序用来描述进程要完成哪些功能以及如何完成;数据集则是程序在执...
    99+
    2024-04-02
  • JS中的进程和线程详解
    进程和线程都是计算机中的概念,用于描述程序执行时的运行单位。 进程是指正在运行的程序的实例,包括程序代码、数据、堆栈和资源等。 每个进程都拥有独立的地址空间,因此不同进程之间的数据无...
    99+
    2023-05-17
    JS的进程和线程 JS中的进程 JS中的线程
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作