<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 》
链接生成中.........
相关文章:
<JavaEE> 什么是线程(Thread)?进程和线程有什么区别?
目录 一、线程(Thread)的概念 二、线程存在的意义 2.1 并发编程 2.2 比进程更“轻量” 三、使用线程时应该注意 四、进程和线程的区别 五、Java中的线程和操作系统中的线程是不同的概念 六、多线程编程 一、线程(Thread)的…...
【赠书第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 状态管…...
《golang设计模式》第三部分·行为型模式-07-观察者模式(Observer)/发布者—订阅者模式
文章目录 1. 概念1.1 角色1.2 类图 2. 代码示例2.1 代码2.2 类图 1. 概念 观察者(Observer)指当目标对象状态发生变化后,对状态变化事件进行响应或处理的对象。 1.1 角色 Subject(抽象主题): 它可以有多…...
Maven中常用命令以及idea中使用maven指南
文章目录 Maven 常用命令compiletestcleanpackageinstallMaven 指令的生命周期maven 的概念模型 idea 开发maven 项目idea 的maven 配置idea 中创建一个maven 的web 工程在pom.xml 文件添加坐标坐标的来源方式依赖范围编写servlet maven 工程运行调试 Maven 常用命令 compile …...
深度学习之八(生成对抗网络--Generative Adversarial Networks,GANs)
概念 生成对抗网络(Generative Adversarial Networks, GANs)是一种深度学习模型,由 Ian Goodfellow 等人于2014年提出。GAN 的目标是通过训练两个神经网络(生成器和判别器),使得生成器能够生成与真实数据相似的样本,而判别器能够区分真实样本和生成样本。这两个网络相…...
内部网关协议_路由信息协议RIP_开放路径优先OSPF协议_基本知识
目录: 因特网路由选择协议概述 路由信息协议RIP 开放路径优先OSPF协议 因特网路由选择协议概述 一.路由选择分类 静态路由选择和动态路由选择 静态路由选择: 采用人工配置的方式给路由器添加网络路由、默认路由和特定主机路由等路由条目。静态路由选择简单、开销小&#…...
Linux python安装 虚拟环境 virtualenv
根目录创建 venvs 文件夹 sudo mkdir /venvs 进入 /venvs 目录 cd /venvsp 创建虚拟环境,前提要按照 python3 安装 的 命令 sudo apt install python3 sudo python3 -m venv 虚拟环境名 激活虚拟环境 sourcepippip /venvs/zen-venv/bin/activatepinpi 安装flask pip…...
洛谷 P1883 函数
P1883 函数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Error Curves - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 这两题是一模一样的,过一题水两题。 分析 主要难点在于证明F(x)是一个单峰函数可以被三分,但是我随便画了几个f(x)之后发现好像…...
【C++心愿便利店】No.14---C++之探索list底层原理
文章目录 前言一、list的介绍及使用1.1 list的介绍1.2 list的使用1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list operations1.2.7 list的迭代器失效 二、list的模拟实现2.1 定义一个结构体实现list的…...
【广州华锐互动】VR防溺水安全内容体验提高群众防溺水意识
在全球各地,溺水是导致儿童和青少年死亡的主要原因之一。据世界卫生组织的统计,全球每年有超过36万人因溺水而死亡,其中大部分是儿童和青少年。因此,提供有效的防溺水教育和培训至关重要。随着科技的发展,虚拟现实&…...
【Skynet 入门实战练习】游戏模块划分 | 基础功能模块 | timer 定时器模块 | logger 日志服务模块
文章目录 游戏模块基础功能模块定时器模块日志模块通用模块 游戏模块 游戏从逻辑方面可以分为下面几个模块: 注册和登录网络协议数据库玩法逻辑其他通用模块 除了逻辑划分,还有几个重要的工具类模块: Excel 配置导表工具GM 指令测试机器人…...
python内置模块binascii,二进制数据和ASCII字符串之间进行转换
一、简介 binascii是Python标准库中的一个模块,提供了在二进制数据和ASCII字符串之间进行转换的功能。它包含了一些用于处理二进制数据的函数,可以进行二进制数据的编码、解码和转换。 二、方法 binascii.unhexlify(hexstr):将十六进制表示…...
如何开启MySQL的慢查询日志
说明:如果需要查看某一条SQL查询速度慢,并对慢的SQL进行优化,那么开启MySQL慢查询日志是一定要做的事情,本文介绍如何开启MySQL的慢查询日志; 查看MySQL慢查询是否开启 首先,输入下面的命令,查…...
Spine的BoundingBoxAttachment碰撞检测
引擎版本 —— cocos creator 2.3.4 游戏代码: //优先初始化的时候,获取到cc.PhysicsPolygonColliderthis._poly this.dragonFooAni.node.getComponent(cc.PhysicsPolygonCollider);//下面的修改顶点位置的方法可以在update里面去执行//获取骨骼动画上…...
Proteus下仿真AT89C51报“串行口通信失败,请检查电平适配是否正确。”解决办法
在Proteus下进行AT89C51串行口仿真时,如果遇到“串行口通信失败,请检查电平适配是否正确”的错误提示,以下是一些解决办法: 1. 了解AT89C51和外部设备的电平要求: 首先,了解AT89C51和外部设备之间的电平…...
微信小程序制作
如果你也想搭建一个小程序,但不知道如何入手,那么今天我就教你如何使用第三方制作平台,在短短三十分钟内搭建一个小程序。 一、登录小程序制作平台 首先,登录到小程序制作平台的官方网站或应用程序,进入后台管理系统。…...
快速在WIN11中本地部署chatGLM3
具体请看智谱仓库github:GitHub - THUDM/ChatGLM3: ChatGLM3 series: Open Bilingual Chat LLMs | 开源双语对话语言模型 或者Huggingface:https://huggingface.co/THUDM/chatglm3-6b 1. 利用Anaconda建立一个虚拟环境: conda create -n chatglm3 pyt…...
土地利用数据技术服务
一、背景介绍 土地是人类赖以生存与发展的重要资源和物质保障,在“人口-资源-环境-发展(PRED)”复合系统 中,土地资源处于基础地位。随着现代社会人口的不断增长以及工业化、城市化进程的加速&a…...
qml动画过渡Transition
文章目录 基本概念使用 `Transition`示例动画过渡高级用法示例:复杂动画过渡解释进阶用法在 QML 中,Transition 元素用于定义状态之间过渡时的动画。这是 QML 强大的状态机制的一部分,允许开发者创建平滑且吸引人的用户界面交互。使用 Transition,您可以定义当元素从一个状…...
Django(九、cookie与session)
文章目录 一、cookie与session的介绍HTTP四大特性 cookiesession Django操作cookie三板斧基于cookie的登录功能set_cookie 设置cookie 清空cookie设置cookie参数Django操作session设置session获取session清空sessionsession相关的参数设置过期时间 CBV添加装饰器 一、cookie与s…...
手把手教你用frp+WebSocket,把家里的树莓派服务安全暴露到公网(保姆级配置)
树莓派私有云安全外网访问:基于frp与WebSocket的全链路加密方案 在家庭宽带环境下搭建私有云服务(如Nextcloud、Home Assistant或Jellyfin媒体服务器)时,最大的痛点莫过于如何安全稳定地从外网访问这些服务。传统方案需要公网IP和…...
手把手教你用Verilog在FPGA上实现激光光斑质心算法(附仿真代码与避坑指南)
从MATLAB到FPGA:激光光斑质心算法的Verilog实现全解析 激光光斑质心定位在工业检测、姿态跟踪等领域具有广泛应用。传统基于PC的方案存在延迟高、扩展性差等问题,而FPGA凭借其并行处理能力和低延迟特性,成为实现实时质心计算的理想选择。本文…...
Mali GPU架构下的OpenCL优化策略与实践
1. OpenCL在Mali GPU上的架构适配挑战OpenCL作为跨平台并行计算框架,其设计初衷是提供统一的编程接口来利用异构计算设备的计算能力。但在实际应用中,不同GPU架构的特性差异会导致性能表现大相径庭。Mali GPU作为ARM旗下的移动图形处理器,其架…...
别再手动算坐标了!用Python的pyproj搞定WGS-84、UTM、ECEF互转(附避坑指南)
地理坐标转换实战:用Python的pyproj实现WGS-84到UTM/ECEF的高效互转 当你处理GPS数据时,是否曾被各种坐标系搞得晕头转向?WGS-84、UTM、ECEF这些术语听起来就像天书,而手动计算转换公式更是让人望而生畏。本文将带你用Python的py…...
Boris开发者指南:如何贡献代码和参与社区建设
Boris开发者指南:如何贡献代码和参与社区建设 【免费下载链接】boris A tiny REPL for PHP 项目地址: https://gitcode.com/gh_mirrors/bo/boris Boris作为一款轻量级但功能强大的PHP REPL(Read-Evaluate-Print-Loop)工具,…...
VSCode AI编程伴侣Twinny:本地部署与云端API配置全攻略
1. 项目概述:一个真正免费的VSCode AI编程伴侣 如果你和我一样,是个长期泡在代码编辑器里的开发者,肯定对AI编程助手又爱又恨。爱的是它确实能提升效率,恨的是那些主流工具要么收费不菲,要么对网络和隐私有要求。直到…...
CICD-Goat CI/CD安全最佳实践:企业级防护方案完整指南
CICD-Goat CI/CD安全最佳实践:企业级防护方案完整指南 【免费下载链接】cicd-goat A deliberately vulnerable CI/CD environment. Learn CI/CD security through multiple challenges. 项目地址: https://gitcode.com/gh_mirrors/ci/cicd-goat CICD-Goat是一…...
Cambrian-S视频多模态大语言模型架构与训练策略
1. Cambrian-S视频多模态大语言模型架构解析视频多模态大语言模型(Video MLLM)的核心挑战在于如何有效融合视觉序列与语言模态。Cambrian-S采用分层架构设计,通过四个关键组件实现这一目标:1.1 视觉编码器选型与优化SigLIP2-So400…...
C语言国产化编译适配实战:从龙芯GCC到毕昇Bisheng,7类典型报错的秒级定位与修复手册
更多请点击: https://intelliparadigm.com 第一章:C语言国产化编译适配的演进脉络与技术全景 随着信创产业加速落地,C语言作为操作系统、嵌入式系统与基础软件的核心载体,其编译工具链的国产化适配已从“可用”迈向“好用”与“可…...
GEO 实战教程:企业生成式引擎优化的完整实现方案
生成式引擎优化(GEO)正在成为企业获取 AI 搜索流量的核心技术。本文将从工程实现的角度,讲解如何从零构建企业的 GEO 体系。一、GEO 技术架构总览GEO 的核心技术栈包含三个层面:语料采集层、知识处理层、内容优化层。语料采集层负…...
