Java面试之程序、进程、线程、管程和并发、并行的概念

简介: Java面试之程序、进程、线程、管程和并发、并行的概念

1. 进程与线程

1.1 程序

程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个静态的概念。简单的说就是我们写的代码。

1.2 进程

(1)程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至 CPU,数据加载至内存。在

指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理 IO 的,当一个程序被运行,

从磁盘加载这个程序的代码至内存,这时就开启了一个进程。

(2)进程是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间,一个应用程序可以同时运行多个进程。进程也是程序的一次执行过程,它是一个动态的概念,是系统运行程序的基本单位;系统运行一个程序即是一个进程从创建、运行到消亡的过程。

(3)进程是计算机中的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配与调度的基本单位。可以把进程简单的理解为正在操作系统中运行的一个程序(比如我们使用的QQ,就启动了一个进程,操作系统就会为该进程分配内存空间。当我们使用迅雷,又启动了一个进程,操作系统将为迅雷分配新的内存空间。)

(4)进程可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360安全卫士等)

1.3 线程

(1)线程是由进程创建的,是进程的一个实体,一个进程之内可以分为一到多个线程(例如:使用浏览器同时下载多个文件,就是一个进程有多个线程)

(2)一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 CPU 执行

(3)Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。 在 windows 中进程是不活动的,只是作为线程的容器

①单线程

同一个时刻,只允许执行一个线程

②多线程

同一个时刻,可以执行多个线程,比如:一个qq进程,可以同时打开多个聊天窗口

(4)Java主线程与子线程

①JVM启动时会创建一个主线程,该主线程负责执行main方法 . 主线程就是运行main方法的线程。

②Java中的线程是不孤立的,线程之间存在一些联系. 如果在A线程中创建了B线程, 称B线程为A线程的子线程, 相应的A线程就是B线程的父线程。

1.4 管程

管程俗称Monitor(监视器),也就是我们平时所说的锁。执行线程要求先成功持有管程,然后才能执行方法,最后方法完成时释放管程(无论是正常完成还是非正常完成)。在方法执行期间,执行线程持有了管程,其他线程都无法再获取到同一个管程

2.并行与并发

2.1 并发

(1)操作系统中有一个组件叫做任务调度器,将 cpu 的时间片(windows下时间片最小约为 15 毫秒)分给不同的线程使用,只是由于 cpu 在线程间(时间片很短)的切换非常快,人类感觉是 同时运行的 。单核 cpu 下,线程实际还是 串行执行 的。总结为一句话就是: 微观串行,宏观并行 。一般会将这种 线程轮流使用 CPU 的做法称为并发(concurrent)

(2)并发(concurrent)是同一时间应对(dealing with)多件事情的能力

2.2 并行

(1)多核 cpu下,每个 核(core) 都可以调度运行线程,这时候线程可以是并行的。

(2)并行(parallel)是同一时间动手做(doing)多件事情的能力

(3)同一个时刻,多个任务同时执行。多核cpu可以实现并行。

目录
相关文章
|
1月前
|
设计模式 运维 监控
并发设计模式实战系列(4):线程池
需要建立持续的性能剖析(Profiling)和调优机制。通过以上十二个维度的系统化扩展,构建了一个从。设置合理队列容量/拒绝策略。动态扩容/优化任务处理速度。检查线程栈定位热点代码。调整最大用户进程数限制。CPU占用率100%
148 0
|
1月前
|
存储 缓存 安全
JUC并发—11.线程池源码分析
本文主要介绍了线程池的优势和JUC提供的线程池、ThreadPoolExecutor和Excutors创建的线程池、如何设计一个线程池、ThreadPoolExecutor线程池的执行流程、ThreadPoolExecutor的源码分析、如何合理设置线程池参数 + 定制线程池。
JUC并发—11.线程池源码分析
|
22天前
|
算法 Java 调度
Java多线程基础
本文主要讲解多线程相关知识,分为两部分。第一部分涵盖多线程概念(并发与并行、进程与线程)、Java程序运行原理(JVM启动多线程特性)、实现多线程的两种方式(继承Thread类与实现Runnable接口)及其区别。第二部分涉及线程同步(同步锁的应用场景与代码示例)及线程间通信(wait()与notify()方法的使用)。通过多个Demo代码实例,深入浅出地解析多线程的核心知识点,帮助读者掌握其实现与应用技巧。
|
2月前
|
Java 中间件 调度
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
本文涉及InheritableThreadLocal和TTL,从源码的角度,分别分析它们是怎么实现父子线程传递的。建议先了解ThreadLocal。
116 4
【源码】【Java并发】从InheritableThreadLocal和TTL源码的角度来看父子线程传递
|
1月前
|
Java
java 多线程异常处理
本文介绍了Java中ThreadGroup的异常处理机制,重点讲解UncaughtExceptionHandler的使用。通过示例代码展示了当线程的run()方法抛出未捕获异常时,JVM如何依次查找并调用线程的异常处理器、线程组的uncaughtException方法或默认异常处理器。文章还提供了具体代码和输出结果,帮助理解不同处理器的优先级与执行逻辑。
|
1月前
|
机器学习/深度学习 消息中间件 存储
【高薪程序员必看】万字长文拆解Java并发编程!(9-2):并发工具-线程池
🌟 ​大家好,我是摘星!​ 🌟今天为大家带来的是并发编程中的强力并发工具-线程池,废话不多说让我们直接开始。
74 0
|
算法 Java 数据库
JAVA并发处理经验(四)并行模式与算法4:并行搜索模式
一、前言 在并行搜索模式中,主要是内存数据很大,需要查找的情况。因为我们通常需要查找数据库返回的结果据很少,在几百条以内。
1170 0
|
4月前
|
存储 监控 Java
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
276 60
【Java并发】【线程池】带你从0-1入门线程池
|
3月前
|
存储 网络协议 安全
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
145 23
|
2月前
|
数据采集 存储 网络协议
Java HttpClient 多线程爬虫优化方案
Java HttpClient 多线程爬虫优化方案