首页 > 系统相关 >进程和线程

进程和线程

时间:2024-05-26 16:32:42浏览次数:18  
标签:Java Thread 创建 start 线程 进程

何为进程:

进程是程序的一次执行过程,是系统运行程序的基本单位,因此进程是动态的。系统运行一个程序即是一个进程从创建,运行到消亡的过程。当一个程序被运行, 从磁盘加载这个程序的代码至内存, 这时就开启了一个 进程。进程就可以视为程序的一个实例。站在操作系统的角度, 进程是程序运行资源分配(以内存为主)的最小单位。

何为线程:

线程必须依赖于进程而存在,线程是进程中的一个实体,是 CPU 调度和分 派的基本单位,它是比 进程更小的、能独立运行的基本单位。线程自己基本上不 拥有系统资源 , ,只拥有在运行中必不可少的资源( 如程序计数器 , 一组寄存器和栈 ), 但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。 一个进程可 以拥有多个线程, 一个线程必须有一个父进程。线程, 有时也被称为轻量级进程 ( LWP ),早期 Linux 的线程实现几乎就是复用的进程,后来 才独立出自己的 API。 新启线程有几种方式?

官方说法是在 Java 中有两种方式创建一个线程用以执行, 一种是派生自 Thread 类,另一种是实现 Runnable 接口。

其实Java创建线程有很多种方式啊,像实现Runnable、Callable接口、继承Thread类、创建线程池等等,不过这些方式并没有真正创建出线程,严格来说,Java就只有一种方式可以创建线程,那就是通过new Thread().start()创建。

而所谓的Runnable、Callable……对象,这仅仅只是线程体,也就是提供给线程执行的任务,并不属于真正的Java线程,它们的执行,最终还是需要依赖于new Thread()……

深入理解 run() start()? Thread 类是 Java 里对线程概念的抽象,可以这样理解:我们通过 new Thread() 其实只是 new 出一 个 Thread 的实例,还没有操作系统中真正的线程挂起钩来。 只有执行了 start() 方法后,才实现了真 正意义上的启动线程。 从 Thread 的源码可以看到, Thread 的 start 方法中调用了 start0() 方法,而 start0() 是个 nati ve 方 法, 这就说明 Thread#start 一定和操作系统是密切相关的。 start() 方法让一个线程进入就绪队列等待分配 cpu ,分到 cpu 后才调用实现 的 run() 方法, start() 方 法不能重复调用,如果重复调用会抛出异常。而 run 方法是业务逻辑实现的地方, 本质上和任意一个类的任意一个成员方 法并没有任何区别, 可以重复执行,也可以被单独调用。

标签:Java,Thread,创建,start,线程,进程
From: https://blog.csdn.net/qq_51182288/article/details/139216270

相关文章

  • linux 死锁排查以及线程信息打印
     脚本名称,gstack.sh#!/bin/shiftest$#-ne1;thenecho"Usage:`basename$0.sh`<process-id>"1>&2exit1fiiftest!-r/proc/$1;thenecho"Process$1notfound."1>&2exit1fi#GDBdoesn&#......
  • 第一部分 多线程基础
    本系列博客,主要是面向Java8的源码。本系列博客主要参考汪文君老师《Java高并发编程详解》一书转载请注明出处,多谢~。1.线程的start方法剖析/***Causesthisthreadtobeginexecution;theJavaVirtualMachine*callsthe<code>run</code>methodofthisth......
  • vb.net 利用APi 、句柄,通过GetWindowThreadProcessId 获得窗口所在进程ID和线程ID 结
    '''<summary>'''声明'''</summary>'''<paramname="hwnd"></param>'''<paramname="lpdwProcessId"></param>......
  • C#的奇技淫巧:利用WinRM来远程操控其他服务器上的进程
     前言:有时候远程服务器的进程你想偷偷去围观一下有哪些,或者对一些比较调皮的进程进行封杀,或者对一些自己研发的服务进行远程手动启动或者重启等,又不想打开远程桌面,只想悄咪咪地执行,那也许下面的文章会对你有启发。前提条件确保远程服务器(服务端)已启用WinRM。在远程服务器上运......
  • 鸿蒙HarmonyOS实战-Stage模型(进程模型)
    ......
  • linux: 操作系统与进程概念
    在计算机的组成原理中,我们经常用计算机通常遵循冯诺伊曼体系结构,即控制器,存储器,运算器,和输入设备及输出设备,而通常将里面的存储器称为内存,运算器和控制器一起集成为CPU,输入输出统称为外设,我们日常写的代码由输入设备加载到内存中,由处理器识别成机器码,再通过CPU中的指令......
  • Android跨进程通信--Binder机制及AIDL是什么?
    文章目录Binder机制Binder是什么?Binder相对于其他几种跨进程通信方式,有什么区别?谈一下BinderIPC通信过程:具体的通讯过程是什么?Binder如何处理发送请求与接收请求?Binder是通过什么方式来进行内存映射的?Binder是如何进行管理的?Binder、Socket的数据限制是多少?自己APP如......
  • JAVAEE之线程(10)_线程池、线程池的创建、实现线程池
    一线程池1.1为什么要有线程池? 线程池顾名思义是由多个线程所组成,作用就是减少线程的建立与销毁,与数据库连接池相同概念,为了减少连接与释放,从而降低消耗提升效率。1.2线程池的优势总体来说,线程池有如下的优势:降低资源消耗。通过重复利用已创建的线程降低线程创建和......
  • 进程和线程的区别
    进程与线程的区别进程:进程是操作系统中资源分配的基本单位。它包括程序代码、打开的文件、挂起的信号、内核内部数据、处理器状态、内存地址空间等。进程拥有独立的地址空间,这意味着每个进程都有自己的内存空间,一个进程不能直接访问另一个进程的内存空间,除非通过进程间通信(IPC......
  • Java 多线程编程 力扣实题
    多线程编程实例了解内存模型、线程通信和线程安全之后,对多线程编程已经有了理论上的认知,现在来实战一下。所有题目在https://leetcode.cn/problemset/concurrency/。按序打印题干描述给你一个类:publicclassFoo{publicvoidfirst(){print("first");}publicvoidseco......