<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.hqwc.cn/news/212721.html

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

相关文章

Linux进程通信——信号(一)

原理 对于 Linux来说,实际信号是软中断,许多重要的程序都需要处理信号。 信号,为 Linux 提供了一种处理异步事件的方法。比如,终端用户输入了ctrlc来中断程序,会通过信号机制停止一个程序。 概述 信号的名字和编号 …

nodejs 如何将 Buffer 数据转为 String

问题说明 使用webSocket的时候出现了一个问题,前端小程序和nodejs后端建立websocket连接后,使用send方法发送到后端为buffer格式,以下为我前后端代码 1、前端小程序代码 //创建webSocket连接 const socket uni.connectSocket({url: wss…

畅捷通T6 客户端登录提示 运行时错误 372 加载控件cfloatmenu失败

客户单win10电脑, T6版本是 V7.1 不知道操作了什么每个电脑提示 运行时错误372: 从加载控件CFloatMenu失败。您的版本可能已过期。确认您使用的控件版本是同您的应用程序一起提供的。 ******* 解决办法: 找个其他电脑复制mscomctl.ocx 到操作系统目录里面注册一下,即可. …

linux网络之网络层与数据链路层

文章目录 一、网络层 1.IP协议 2.IP协议头格式 3.网段划分 4.特殊ip地址 5.IP地址的数量限制 6.私有ip和公网IP 7.路由 二、数据链路层 1.以太网 2.以太网帧格式 3.MAC地址 4.对比理解MAC地址和IP地址 5.MTU 6.ARP协议 ARP协议的工作流程 ARP数据报的格式 7.DNS 8.ICMP协议 9.N…

【Python】

Python 一、入门语法1.1 字符串的多种定义方式1.2 Python中的运算符1.3 input语句1.4 字符串格式化的方式 二、Python判断语句2.1 布尔类型和比较运算符2.2 if判断语句的基础格式2.3 if else语句的使用2.4 if_elif_else语句的使用2.5 判断语句的嵌套 三、Python循环语句3.1 whi…

操作系统(七)| 设备管理-- 端口 驱动程序 基本I/O控制 磁盘I/O

文章目录 1 设备管理概述1.1 系统总线结构1.2 设备控制器通用结构1.3 I/O设备的模型 2 I/O端口2.1 寻址方式 3 驱动程序4 基本I/O控制方式4.1 程序直接控制4.2 中断I/O方式4.3 DMA方式4.4 I/O通道控制方式 5 I/O管理中的重要思想5.1 设备独立性5.2 SPOOLing技术5.3 I/O软件的多…

C++类与对象(4)—日期类的实现

目录 一、类的创建和方法声明 二 、输出&运算符重载 三、检查合法性 1、获取对应年月的天数 2、初始化 四、实现加等和加操作 1、先写再写 2、先写再写 3、两种方式对比 五、实现自增和--自减 1、自增 2、自减 六、 实现减等和减操作 1、减等天数 2、加负数…

【开源】基于Vue.js的数据可视化的智慧河南大屏

项目编号: S 059 ,文末获取源码。 \color{red}{项目编号:S059,文末获取源码。} 项目编号:S059,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 …

Dubbo3使用Zookeeper作为注册中心的方案讨论!详解DubboAdmin与PrettyZoo来监控服务的优劣!

文章目录 一:Dubbo注册中心的基本使用 二:Zookeeper注册中心的使用 1:依赖引入 2:实际开发 三:Zookeeper作为注册中心的使用展示 1:启动注册Zookeeper服务 2:引入注册中心 (一)&#xf…

CTF-PWN-QEMU-前置知识

文章目录 QEMU 内存管理(QEMU 如何管理某个特定 VM 的内存)MemoryRegion gpa->hpaFlatView:表示MR 树对应的地址空间FlatRange:存储不同MR对应的地址信息AddressSpace:不同类型的 MemoryRegion树RAMBlock总体简化图 QEMU 设备模拟 &#x…

Redis-Redis高可用集群之水平扩展

Redis3.0以后的版本虽然有了集群功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,今天就来带大家看看redis高可用集群如何做水平扩展,原始集群(见下图)由6个节点组成,6个节点分布在三…

基于IDEA+Tomcat+Mysql开发的企业资产管理

基于Tomcat的企业资产管理信息系统 项目介绍💁🏻 企业资产管理系统”项目是一个管理和维护企业资源的平台,能够提供系统管理、内容管理、用户管理、组织架构维护、流程管理、模块管理、角色管理、调度管理和个人设置等功能。 本项目所述的全…