请你说一下线程和进程的区别(什么是线程?什么是进程)

        本文旨在作学习记录,内容源自JavaGuide,作者在此基础上进行补充说明、整理论述,使其能以一种更为逻辑地清晰地方式表达出“请你说一下线程和进程的区别(java)”的理解,更多适应于java面试回答,亦可作对java中关于线程和进程的简要了解。

一、进程的定义

        定义:并发执行的程序在执行过程中(操作系统)分配和管理资源的基本单位,是动态概念。系统运行一个程序即是一个进程从创建,运行到消亡的过程。

二、线程的定义

        定义:线程是CPU调度的基本单位,是比进程更小的执行单位,一个进程在执行过程中可以产生多个线程。在 Java 中,当我们启动 main 函数时其实就是启动了一个 JVM 的进程,而 main 函数所在的线程就是这个进程中的一个线程,也称主线程。

三、java语言中关于两者的区别

线程和进程区别

        ①.线程是进程划分成的更小的执行单位

        ②.与进程不同的是同类的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。

        ③.线程和进程最大的不同在于基本上各进程是独立的,而各线程则不一定,因为同一进程中的线程极有可能会相互影响。

        ④.线程执行开销小,但不利于资源的管理和保护;而进程正相反。


        补充说明上述第二点区别。首先,如果你对 Java 内存区域 (运行时数据区) 不太了解的话,不妨拜读下该篇文章《可能是把Java内存区域讲的最清楚的一篇文章》。接下来,分别论述为何某些数据区是线程私的有或线程共享的。下图转载自JavaGuide。

数据区私有

        在程序计数器中,计数器记录着当前线程的执行位置,当线程切换回来的时候(如因为时间片耗尽,线程重新等待,当再次获取CPU资源时候,将移动至上次未执行的位置)知道执行到哪了。即线程切换后能恢复到正确的位置。所以程序计数器私有。

        在虚拟机栈(java栈)中,虚拟机栈是由一个个栈帧组成,组成包括局部变量表、操作数栈、动态链接。方法出口信息。而局部变量表保存着各种数据类型数据和对象引用,即java栈为了保证线程中的局部变量不被其他的线程访问。

        在本地方法栈中,它与虚拟机栈同理,由栈帧组成,组成包含局部变量表。(本地方法栈为native方法服务,虚拟机栈为java方法服务),即本地方法栈为了保证线程中的局部变量不被其他的线程访问。

数据区共享

        存放的是对象实例,方法区存放的是已被虚拟机加载后的类信息、常量、静态变量、即时编译器编译后的代码。即堆和方法区被线程共享。

四、结语

        如果对你有帮助,请点赞收藏,谢谢哈。

       

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值