进程和线程的区别

狭义上来说,进程是指正在运行的程序,打开任务管理器即可看到进程对应的一推软件。通俗地说,进程是应用程序在内存中分配的存储空间。注意它的主谓宾。

线程是进程中负责程序执行、运算的执行单元,类似于工厂里的工人,工人把工厂按照一定的规则继续运行下去。

一个进程至少有一个线程来负责程序的进行,有多个线程来运行程序的时候就叫多线程。当我们启动一个Java程序的时候,操作系统就会创立一个Java进程,这个Java进程可以创建多个线程(执行main方法的就是一个名为main的线程),这些线程都拥有各自的计数器、堆栈和局部变量等属性,并且能够访问共享的内存变量。处理器在这些线程上高速切换,让使用者感觉到这些线程在同时进行。

然后来一个更通俗一点的比喻:当你打开QQ电脑管家

在这里插入图片描述

像这样就是打开了一个进程,在内存中为QQ电脑管家分配了存储空间。然后此时其实已经有一个线程在监听界面上的事件,当我们点击“病毒查杀”时,它又会产生一个新的线程去做病毒查杀这件事情,而此时你还可以点击“垃圾清理”进行垃圾清理,这又会产生一个新的线程,病毒查杀和垃圾清理这两件事情同时进行,即两个线程在同时运行着。

总结来说,进程和线程的区别是

1.简单而言,一个应用程序就是一个进程,而线程是一个进程内部的多个运行单位。

2.多个进程的内部数据和状态都是完全独立存在的,而多线程是共享一块内存空间和一组系统资源(同一进程内),在程序内部可以互相调用(通过对象方法);而进程间通信大多数情况是必须通过网络实现的,比如我们访问google网站,就是自己机器上的ie进程和google的web服务器进程之间的通信。

3.线程本身的数据通常只有寄存器数据,以及一个程序执行时使用的堆栈,所以线程的切换比进程的切换负担要小。

4.进程是资源分配的基本单位,线程是程序运行,cpu调度的基本单位。

可以理解一下java的内存模型和jvm的运行时数据区,多线程运行时,各个线程拥有一套自己的空间地址(也就是前面说的栈,寄存器,程序计数器),然后是各个线程共享一个进程的空间地址(也就是堆内存,方法区)。然后还可以了解一下volatile在多线程中的作用。基本上就能把这个知识点吃透了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值