【Java多线程】对进程与线程的理解

简介: 【Java多线程】对进程与线程的理解

1、进程/任务(Process/Task)

进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程;同时,在操作系统内部,进程又是操作系统进行资源分配的基本单位。


描述进程的是:PCB


组织进程的是:链表


2、进程控制块抽象(PCB Process Control Block)

进程是应用程序被调用时的一个状态,一个进程对应一个PCB,PCB是管理进程的,一个应用程序可以有多个进程。


2.1、PCB重要属性

PID,进程的标识符

内存指针,描述进程使用的内存、指令/代码、数据的位置

文件描述符表,进程使用的硬盘的相关信息

2.2、PCB中支持进程调度的一些属性

状态

       用于描述这个进程当前的状态,能够通过状态得知此时是否方便去cpu上执行。


       例如:当某个进程通过Scanner等待用户输入内容时,此时如果用户还未输入内容,该进程就已经去cpu上执行并等待接收用户输入了,如果用户一直不输入,该进程就会一直占用cpu,导致其他进程无法调用执行cpu。


       而有了状态描述,就可以避免让这种进程在还未能执行时的“堵塞状态”,不去占用cpu,等到方便执行时(即用户输入完成后),给出一个“就绪状态”,此时就证明可以该进程可以去cpu上执行。


优先级

       多个进程等待系统调度,这就需要有优先级。用于表示各个进程之间的优先级。


       例如:打游戏时,游戏和微信qq的优先级,想必也知道游戏的优先级更高。


记账信息

       统计每个进程占据cpu的时间,可以根据统计结果进一步调整调度的策略。


上下文

       PCB中的数据结构,支撑进程调度的重要属性,保存进程运行过程中的中间状态到内存中。通过上下文可以做到相当于游戏中的存档和读档操作。


3、 内存分配 —— 内存管理(Memory Manage)

核心结论:每个进程的内存是相互独立、互不干涉的。这是为了保证系统的稳定性,例如某个进程代码出现bug(内存读写越界),那么该bug只会影响自己,不会影响其他进程。


但是也有例外,虽然说进程之间相互独立,但是有的时候需要多个进程相互配合完成某个工作。


记忆:每个人的房子相互独立,但是公园都是大家的公共空间,这两者是不冲突的。


4、线程(Thread)

进程频繁的创建和销毁时,会有非常大的开销,主要体现在资源的申请和释放上。为了解决这一问题,就引入了【线程】这个概念,相当于细分了进程。


线程也可以称为“轻量级进程”,在进程的基础上做出了改进。


保持了独立调度执行,同时又省去了“申请资源”“释放资源”带来的额外开销。


5、进程和线程的总结

进程是包含线程的,每个进程至少有一个线程存在,即主线程。

进程和进程之间不共享内存空间,同一个进程的线程之间共享同一个内存空间(所以资源开销少,但会影响其他线程)。

没有线程这个概念之前,进程是系统分配资源的最小单位,也是系统调度执行的最小单位。

有线程这个概念之后,进程是系统分配资源的最小单位,线程是系统调度执行的最小单位。

一个进程挂了一般不会影响到其他进程,但是一个线程挂了, 可能把同进程内的其他线程一起带走(整个进程崩溃)。


正因为线程之间共用同一块内存空间,因此某个线程出现bug时,可能会影响到其他线程。

如何正确处理这些问题,是使用线程的一个难点。


附上一个生动的理解图:


目录
相关文章
|
1天前
|
缓存 Java 调度
Java中的多线程编程:从基础到实践
【10月更文挑战第24天】 本文旨在为读者提供一个关于Java多线程编程的全面指南。我们将从多线程的基本概念开始,逐步深入到Java中实现多线程的方法,包括继承Thread类、实现Runnable接口以及使用Executor框架。此外,我们还将探讨多线程编程中的常见问题和最佳实践,帮助读者在实际项目中更好地应用多线程技术。
9 3
|
3天前
|
监控 安全 Java
Java多线程编程的艺术与实践
【10月更文挑战第22天】 在现代软件开发中,多线程编程是一项不可或缺的技能。本文将深入探讨Java多线程编程的核心概念、常见问题以及最佳实践,帮助开发者掌握这一强大的工具。我们将从基础概念入手,逐步深入到高级主题,包括线程的创建与管理、同步机制、线程池的使用等。通过实际案例分析,本文旨在提供一种系统化的学习方法,使读者能够在实际项目中灵活运用多线程技术。
|
1天前
|
缓存 安全 Java
Java中的多线程编程:从基础到实践
【10月更文挑战第24天】 本文将深入探讨Java中的多线程编程,包括其基本原理、实现方式以及常见问题。我们将从简单的线程创建开始,逐步深入了解线程的生命周期、同步机制、并发工具类等高级主题。通过实际案例和代码示例,帮助读者掌握多线程编程的核心概念和技术,提高程序的性能和可靠性。
8 2
|
2天前
|
Java
Java中的多线程编程:从基础到实践
本文深入探讨Java多线程编程,首先介绍多线程的基本概念和重要性,接着详细讲解如何在Java中创建和管理线程,最后通过实例演示多线程的实际应用。文章旨在帮助读者理解多线程的核心原理,掌握基本的多线程操作,并能够在实际项目中灵活运用多线程技术。
|
4天前
|
Java 数据处理 开发者
Java多线程编程的艺术:从入门到精通####
【10月更文挑战第21天】 本文将深入探讨Java多线程编程的核心概念,通过生动实例和实用技巧,引导读者从基础认知迈向高效并发编程的殿堂。我们将一起揭开线程管理的神秘面纱,掌握同步机制的精髓,并学习如何在实际项目中灵活运用这些知识,以提升应用性能与响应速度。 ####
20 3
|
2天前
|
Linux 调度
探索操作系统核心:进程与线程管理
【10月更文挑战第24天】在数字世界的心脏,操作系统扮演着至关重要的角色。它不仅是计算机硬件与软件之间的桥梁,更是管理和调度资源的大管家。本文将深入探讨操作系统的两大基石——进程与线程,揭示它们如何协同工作以确保系统运行得井井有条。通过深入浅出的解释和直观的代码示例,我们将一起解锁操作系统的管理奥秘,理解其对计算任务高效执行的影响。
|
2天前
|
Java 开发者
Java中的多线程基础与应用
【10月更文挑战第24天】在Java的世界中,多线程是提高效率和实现并发处理的关键。本文将深入浅出地介绍如何在Java中创建和管理多线程,以及如何通过同步机制确保数据的安全性。我们将一起探索线程生命周期的奥秘,并通过实例学习如何优化多线程的性能。无论你是初学者还是有一定经验的开发者,这篇文章都将为你打开一扇通往高效编程的大门。
8 0
|
监控 安全 Java
如何查看Java进程和线程
如何查看Java进程和线程
2404 1
如何查看Java进程和线程
|
监控 安全 NoSQL
如何查看Java进程和线程?你get了没?
如何查看Java进程和线程?你get了没?
608 0
如何查看Java进程和线程?你get了没?
|
4天前
|
监控 安全 Java
在 Java 中使用线程池监控以及动态调整线程池时需要注意什么?
【10月更文挑战第22天】在进行线程池的监控和动态调整时,要综合考虑多方面的因素,谨慎操作,以确保线程池能够高效、稳定地运行,满足业务的需求。
71 38