【多线程】进程与线程 并发编程 面试题总结

进程和线程

  • 进程是程序执行时的一个实例,即它是程序已经执行到何种程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。
  • 线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
  • 一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构)
  • 线程与同属一个进程的其他的线程共享进程所拥有的全部资源。
  • "进程------资源分配的最小单位,线程------程序执行的最小单位"。
  • 进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。

线程的出现

早期的CPU都是单核的,随着多核CPU的到来,多进程也随之出现,但在并发编程当中,多进程虽然效果也可以,但是也有缺点,进程太重量且效率不高(进程的创建与销毁,耗时,耗内存资源)。为了解决这一为题,就引入了"线程(Thread)"这一概念。线程不能独立存在,必须依附于进程,即进程包含线程。

进程是操作系统进行资源分配和调度的一个基本单位。资源包括CPU、内存、磁盘等IO设备等等。

线程与程序的区别

​ 程序:是静态的,存放在磁盘上的可执行文件

​ 进程:是动态的,是运行在内存中的程序的执行实例

​ 程序是一些指令的有序集合,而进程是程序执行的过程,进程是程序的一次执行过程。进程的状态是变化的,其包括进程的创建、调度和消亡。

​ 只要程序运行,此时就是进程,程序每运行一次,就会创建一个进程

进程和线程的关系:

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

进程与线程的区别?(面试题)

  1. 进程是资源分配的基本单位,线程是调度执行的基本单位。
  2. 进程是包含进程的,一个进程里可以有一个或多个线程。
  3. 同一个进程的线程之间,公用同一份资源(内存+硬盘)如编程时同一个变量,省去了申请资源的开销。
  4. 进程和线程都是用来实现并发编程的,但是线程比进程更轻量。
  5. 进程与进程之间是相互独立的,不同进程的线程之间也是相互独立的,同一个进程的线程之间是相互影响的。

Java如何进行多线程编程?

线程是操作系统的概念。操作系统提供了一些API,可以操作线程。由于不同操作系统所提供的API不太相同,于是Java的JVM对这些操作系统所提供的API,统一进行了封装。使得我们在不同操作系统上用java进行多线程编程的时候,只需要使用一套API就可以了。即可跨平台。

在java中通过 Thread类 创建 Thread对象 ,就可以进一步操作 系统内部 的线程。

观察多线程情况

可以使用 IDEA 或 jconsole 观察,前提是多线程正在运行。以jconsole为例:

首先找到 jconsole ,存在于 JDK 的 bin 目录里。

通过idea的 File -> Project Settings -> SDKS 就可以找到JDK的路径了。

相关推荐
NE_STOP1 小时前
MyBatis-mybatis入门与增删改查
java
Lee川2 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i4 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
孟陬4 小时前
国外技术周刊 #1:Paul Graham 重新分享最受欢迎的文章《创作者的品味》、本周被划线最多 YouTube《如何在 19 分钟内学会 AI》、为何我不
java·前端·后端
想用offer打牌4 小时前
一站式了解四种限流算法
java·后端·go
绝无仅有4 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有4 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
华仔啊5 小时前
Java 开发千万别给布尔变量加 is 前缀!很容易背锅
java
AAA梅狸猫5 小时前
Looper.loop() 循环机制
面试