<JavaEE> 什么是线程(Thread)?进程和线程有什么区别?

目录

一、线程(Thread)的概念

二、线程存在的意义

2.1 并发编程

2.2 比进程更“轻量”

三、使用线程时应该注意

四、进程和线程的区别

五、Java中的线程和操作系统中的线程是不同的概念

六、多线程编程


一、线程(Thread)的概念

线程是操作系统中实现并发编程的一种基本结构。
线程可以被看作是运行在操作系统中的一个独立的工作单元,⼀个线程就是⼀个 "执行流"。
每个线程之间都可以按照顺序执行自己的代码。多个线程之间 "同时" 执行着多份代码。
线程的创建和执行由操作系统负责管理,程序员只需要提供线程执行的任务。
一个进程中可以有多个线程。每个线程也是由一个进程控制块(PCB)进行描述的。

阅读指针 -> 《什么是进程控制块(PCB Process Control Block)?》

<JavaEE> 什么是进程控制块(PCB Process Control Block)?-CSDN博客文章浏览阅读23次。介绍进程控制块和进程控制块的核心属性。进程控制块适用于进程,也适用于线程。https://blog.csdn.net/zzy734437202/article/details/134583750


二、线程存在的意义

2.1 并发编程

线程可以提高程序的并发性能,充分利用多核CPU的资源。
特别是在处理I/O密集型任务时,有些场景需要等待IO,在等待IO时,可以将系统资源调度给其他任务使用。
当程序需要执行多个任务时,线程可以同时处理这些任务,从而提高程序的执行效率。

2.2 比进程更“轻量”

进程也可以进行并发编程,但线程比进程更轻量,线程在创建、调度和销毁上,都要比进程快。
所以线程可以减轻CPU的负担,提高程序的响应速度。
线程保持了独立调度执行,支持并发的同时,省去了“分配资源”和“释放资源”带来的额外开销。这意味着只有在第一个线程,也就是进程创建时才需要申请系统资源,后续线程的创建则不再需要重新申请系统资源了。

三、使用线程时应该注意

注意以下几点说明
线程并非越多越好线程数量太多时,会加剧线程间对有限的CPU资源的竞争,这增加了资源调度的开销,降低了执行效率。
资源共享存在副作用进程和进程之间不会互相影响,但如果同一个进程中的某一个线程抛出异常,这个进程中的其他线程也会受到影响,这就可能导致整个进程异常终止。
线程安全问题线程之间可能互相干扰冲突,导致代码出现逻辑错误。线程安全问题也是并发编程的重点和难点。

四、进程和线程的区别

(1)进程包含线程。每一个进程至少有一个线程,这个线程被称为主线程。
(2)进程和进程之间不共享内存空间,每个进程都有自己的资源。同一个进程的线程之间共享同一分资源,如内存空间、文件描述符表等,每个线程都是一个独立的执行流,单独参加到CPU的调度中。
(3)进程是系统分配资源的最小单位,线程是系统调度的最小单位。
(4)一个进程发生异常一般不会影响到其他进程。但是一个线程出现异常,则可能导致同进程内的其他线程也发生异常,最终可能导致包含这个线程的进程也出现异常。

五、Java中的线程和操作系统中的线程是不同的概念

操作系统中的线程线程是操作系统中的概念。操作系统内核实现了线程机制,并对用户岑提供了供用户使用的线程相关API。
Java中的线程Java标准库中的Thread类是对操作系统提供的API进行了进一步的抽象和封装。

六、多线程编程

多线程程序和非多线程程序的区别和优势在于,多线程每个线程都是一个独立的执行流,多个线程可以并发执行,增加了程序运行速度,提高了程序的运行效率。
许多语言都是支持多进程并发编程,也支持多线程并发编程。但是,在Java中,更鼓励多线程并发编程。
因为在Java标准库中,很多多进程编程的相关API都没有提供,而多线程编程的API都有封装提供。
更重要的是,在Java中每启动一个进程,就要启动一次Java虚拟机,这加大了多进程编程的系统开销。
因此在Java中,更推荐多线程并发编程。

阅读指针 -> 《介绍 线程类 Thread 》

链接生成中.........

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/165118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯官网练习题(奇怪的数列)

题目描述 从 X 星截获一份电码,是一些数字,如下: 13 1113 3113132113 1113122113 ⋯ YY 博士经彻夜研究,发现了规律: 第一行的数字随便是什么,以后每一行都是对上一行"读出来" 比如第 2…

图神经网络的数学原理总结

图深度学习(Graph Deep Learning) 多年来一直在加速发展。许多现实生活问题使GDL成为万能工具:在社交媒体、药物发现、芯片植入、预测、生物信息学等方面都显示出了很大的前景。 本文将流行的图神经网络及其数学细微差别的进行详细的梳理和解释,图深度学…

Linux中flask项目开启https访问

1.下载阿里云免费证书 2.项目添加https配置 3.服务器开启https访问 3.1 重新安装OpenSSL 3.2.重新安装Python 上一次已经讲过Linux安装部署Python: Linux安装Python3.10与部署flask项目实战详细记录,今天记录一下Python项目如何支持https访问…

《计算机中的程序》(灵魂六问)

目录 1、程序是什么? 2、程序是由什么组成的? 3、什么是机器语言? 4、正在运行的程序存储在什么位置? 5、什么是内存地址? 6、计算机的构成元件中,负责程序的解释和运行是哪个? 1、程序是什…

性能相关的闪存特性

一、多Plane操作 上章提到若干个Plane组成Die或者叫LUN,即一个Die上有多个Plane 每次进行写操作时,控制器先将数据写入页缓存中,等同一个Die上另一个Plane也写数据的时候,再同时写入,原来单独操作一个Plane的时间变成了可以同时做…

Springmvc实现增删改差

一、包结构 二、各层代码 (1)数据User public class User {private Integer id;private String userName;private String note;public User() {super();}public User(Integer i, String userName, String note) {super();this.id i;this.userName userName;this.note note;…

Qt实现自定义IP地址输入控件(百分百还原Windows 10网络地址输入框)

在开发网络相关的程序时,我们经常需要输入IP地址,例如源地址和目标地址。Qt提供了一些基础的控件,如QLineEdit,但是它们并不能满足我们对IP地址输入的要求,例如限制输入的格式、自动跳转到下一个输入框、处理回车和退格键等。因此,我们需要自己编写一个自定义的IP地址输入…

AI AIgents时代- Autogen

由微软开发的 Autogen 是一个新的 Agents 项目,刚一上线就登上GitHub热榜,狂揽11k星✨✨✨ 项目地址:https://github.com/microsoft/autogen Autogen 允许你根据需要创建任意数量的Agents,并让它们协同工作以执行任务。它的独特…

外观模式 (Facade Pattern)

定义: 外观模式(Facade Pattern)是一种结构型设计模式,它通过提供一个统一的高层接口来简化复杂子系统或库的访问。这种模式的关键在于,它创建了一个外观类,这个类封装了对子系统的一系列复杂交互&#xf…

【赠书第7期】从零基础到精通Flutter开发

文章目录 前言 1 安装Flutter和Dart 2 了解Flutter的基础概念 2.1 Widget 2.2 MaterialApp和Scaffold 2.3 Hot Reload 3 编写你的第一个Flutter应用 3.1 创建一个Flutter项目 3.2 修改默认页面 3.3 添加交互 4 深入学习Flutter高级特性 4.1 路由和导航 4.2 状态管…

python之TCP的网络应用程序开发

文章目录 版权声明python3编码转换socket类的使用创建Socket对象Socket对象常用方法和参数使用示例服务器端代码客户端代码 TCP客户端程序开发流程TCP服务端程序开发流程TCP网络应用程序注意点socket之send和recv原理剖析send原理剖析recv原理剖析send和recv原理剖析图 多任务版…

浅谈C#在unity应用中的工厂模式

文章目录 前言简单工厂模式工厂方法模式抽象工厂模式Unity实战 前言 工厂模式是一种创建型设计模式,它提供了一种将对象的实例化过程封装起来的方法,使得客户端代码不必直接依赖于具体类。这有助于降低代码的耦合度,提高代码的可维护性和可扩…

Python项目打包

Python项目如何打包? 本指南总结了Python项目打包的最佳实践,主要涉及代码的打包和分发,以及环境和依赖的管理。 0. 一般项目清单 源代码(可使用git托管)数据包(可使用DVC托管)Docker环境镜像…

Python进行threading多线程编程及高级并发处理机制

threading 模块是 Python 中用于进行多线程编程的标准库之一。通过 threading 模块,你可以创建和管理线程,使得程序能够并发执行多个任务。以下是一些基本的 threading 模块的用法: 1. 创建线程: 使用 threading.Thread 类可以创…

在两个java项目中实现Redis的发布订阅模式

如何在两个java项目中实现Redis的发布订阅模式? 1. Redis简介2. 发布订阅模式介绍3. 实现思路4. 代码实现及详细解释4.1. RedisUtil4.2. Publisher4.3. Subscriber4.4. 运行程序 目录: Redis简介发布订阅模式介绍实现思路代码实现及详细解释 1. Redis简…

HTB Napper WriteUp

Napper 2023年11月12日 14:58:35User Nmap ➜ Napper nmap -sCV -A -p- 10.10.11.240 --min-rate 10000 Starting Nmap 7.80 ( https://nmap.org ) at 2023-11-12 13:58 CST Nmap scan report for app.napper.htb (10.10.11.240) Host is up (0.15s latency). Not shown: …

gitee推荐-SAPI++

一下内容来自gitee。 SaaS-Apps-Engine: 智者|SAPI是多应用、多租户SaaS应用引擎,支持(小程序/公众号/轻应用/企微/抖音/支付宝/百度)等多平台应用。基于ThinkPHP6.1/8.0原生多应用模式开发,简洁、高效、易扩展。集成强大的权限控…

适用于电脑的5个免费文件恢复软件分享

适用于电脑的最佳免费文件恢复软件 任何计算机用户都可能经历过丢失重要文件的恐惧。重要数据的丢失可能会令人不安和沮丧,无论是由于不小心删除、计算机故障还是硬盘格式化造成的。幸运的是,在数字时代,您可以使用值得信赖的解决方案检索这些…

好工具|datamap,一个好用的地图可视化Excel插件,在Excel中实现地理编码、拾取坐标

在做VRP相关研究的时候,需要对地图数据做很多处理,比如地理编码,根据“重庆市沙坪坝区沙正街174号”这样的一个文本地址知道他的经纬度;再比如绘制一些散点图,根据某个位置的经纬度在地图上把它标注出来。还有有的时候…

vue + docxtemplater 导出 word 文档

一、痛点 word 导出 这种功能其实之前都是后端实现的,但最近有个项目没得后端。所以研究下前端导出。 ps: 前端还可以导出 pdf,但是其分页问题需要话精力去计算才可能实现,并且都不是很完善。可参考之前的文章:利用 h…