【Java并发知识总结 | 第七篇】Java并发相关概念总结(程序/进程/线程、并行/并发、同步/异步、死锁/避免、线程安全/三大特性)

在这里插入图片描述

文章目录

  • 7.并发相关概念总结(程序/进程/线程、并行/并发、同步/异步、死锁/避免、线程安全/三大特性)
    • 7.1程序、进程与线程
    • 7.2并行和并发
    • 7.3同步和异步
    • 7.4什么是死锁?如何避免?
    • 7.5何为线程安全?以及三大特性

7.并发相关概念总结(程序/进程/线程、并行/并发、同步/异步、死锁/避免、线程安全/三大特性)

7.1程序、进程与线程

  • 程序是静态的概念,windows下通常指exe文件,即可执行文件。
  • 进程
    • 定义:进程是动态的概念,是程序在运行状态,进程说明程序在内存中的边界。
    • 内存:每个进程拥有不同的内存空间(例如:打开多个记事本)
    • 开销方面:每个进程都有独立的代码和数据空间(程序上下文),进程之间的切换会有较大的开销
  • 线程:
    • 定义:线程是进程内的一个”基本任务”,每个线程都有自己的功能,是CPU分配与调度的基本单位。
    • 内存:对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源
    • 开销方面:每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小

7.2并行和并发

  • 并行:多个处理器(或者多核的处理器)同时处理多个不同的任务(物理上同时发生);
  • 并发:一个处理器同时处理多个任务(逻辑上同时发生);

举例:像我们去⾷堂打饭,并⾏就是我们在多个窗⼜排队,⼏个阿姨同时打菜;并发就是我们挤在⼀个窗 ⼜,阿姨给这个打⼀勺,又⼿忙脚乱地给那个打⼀勺。

image-20240421095353040

7.3同步和异步

  • 同步(阻塞模式):
    • 定义:同步就是指一个进程在执行某个请求的时候,若该请求需要一段时间才能返回信息,那么这个进程将会一直等待下去,直到收到返回信息才继续执行下去;
    • 举例:当客户端发送请求给服务端,在等待服务端响应的请求时,客户端不做其他的事情。当服务端做完了才返回到客户端。
  • 异步(非阻塞模式):
    • 定义:异步是指进程不需要一直等下去,而是继续执行下面的操作,不管其他进程的状态。当有消息返回时系统会通知进程进行处理,这样可以提高执行的效率。
    • 举例:客户端发送给服务端请求时,在等待服务端响应的时候,客户端可以做其他的事情,这样节约了时间,提高了效率。
  • 小例子:
    • 比方说一个人边吃饭,边看手机,边说话,就是异步处理的方式。
    • 同步处理就不一样了,说话后在吃饭,吃完饭后在看手机,必须等待上一件事完了,才执行后面的事情。

7.4什么是死锁?如何避免?

  • 定义:死锁(Deadlock)是指多个进程/线程同时被阻塞,它们中的 一个或者全部都在等待 某个资源被释放 。由于进程/线程被无限期地阻塞,因此程序不可能正常终止。
  • 四个必要条件
    • 互斥(x):资源是独占的且排他使用,进程互斥使用资源,即任意时刻一个资源只能给一个进程使用,其他进程若申请一个资源,而该资源被另一进程占有时,则申请者等待直到资源被占有者释放。
    • 请求并保持: 进程每次申请它所需要的一部分资源,在申请新的资源的同时,继续占用已分配到的资源。
    • 非抢占: 进程所获得的资源在未使用完毕之前,不被其他进程强行剥夺,而只能由获得该资源的进程资源释放
    • 循环等待(资源有序分配,即标序号):在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源,P2等待P3占有的资源,…,Pn等待P1占有的资源,形成一个进程等待环路,环路中每一个进程所占有的资源同时被另一个申请,也就是前一个进程占有后一个进程所深情地资源。
  • 破坏死锁:那么避免死锁问题就只需要破环其中一个条件就可以,最常见的并且可行的就是 使用资源有序分配法,来破环环路等待条件
    • 例如:进程PA,使用资源的顺序是R1,R2;
      进程PB,使用资源的顺序是R2,R1;
      若采用动态分配有可能形成环路条件,造成死锁。
      采用有序资源分配法:R1的编号为1,R2的编号为2;
      PA:申请次序应是:R1,R2
      PB:申请次序应是:R1,R2

7.5何为线程安全?以及三大特性

在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且正确的执行,不会出现数据污染等意外情况。

所谓线程安全,主要体现在三方面:原子性、可见性和有序性。

  • 原子性:即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。(synchronized、lock)
  • 可见性:一个线程对主内存的修改可以及时被其他线程看到。(volatile)
  • 有序性:一个线程观察其他线程的指令执行顺序,由于在JMM中允许编译器和处理器对指令重排序,因此该观察结果一般杂乱无序。(volatile)

在这里插入图片描述

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

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

相关文章

java多线程-并发和并行

进程 并发 进程中的线程是由CPU进行调度的,但是CPU能够处理的进程数量有限为了保证所有的线程都在运行,CPU会快速切换,给外界的感觉就是所有的线程都在运行,这就是并发。 并行

C语言入门课程学习记录4

C语言入门课程学习记录4 第18课 - signed 与 unsigned第19课 - 再论数据类型第20课 - 经典问题剖析第21课 - 程序中的辅助语句(上)第22课 - 程序中的辅助语句(下) 本文学习自狄泰软件学院 唐佐林老师的 C语言入门课程,…

pytest教程-30-测试数据管理插件-pytest-datadir

领取资料,咨询答疑,请➕wei: June__Go 上一小节我们学习了pytest重复执行用例插件pytest-repeat,本小节我们讲解一下测试数据管理插件-pytest-datadir。 在软件测试中,有效管理测试数据对于编写全面的测试用例至关重要。Pytest…

vue基础教程(7)——构建项目级首页

同学们可以私信我加入学习群! 正文开始 前言一、页面结构二、侧边栏三、主体部分总结 前言 前面我们学习了vue的路由和登录页搭建,本文将和大家共同学习首页的搭建。 首页示例如图: 很多项目经验比较少的同学,一般都是对某些语…

浅谈操作系统中的重要概念——进程

文章目录 一、什么是程序?二、什么是进程?三、进程与程序有什么区别?四、OS是如何管理进程的4.1、使用 结构体 进行描述进程4.2 、使用数据结构组织众多进程4.3、PCB4.3.1、PCB 里有哪些属性4.3.1.1 pid4.3.1.2 内存指针4.3.1.3 文件描述符表…

2024年如何保存微信小程序里的音频文件#下载高手

今年是2024年,仍然有很多人不知道如何下载,本文就带你们学会如何下载微信小程序里面的音频素材 这里要用到一个工具,下载高手 下载高手链接:https://pan.baidu.com/s/1JUWmNXozWSS3xgmvpdyf0g?pwd1234 提取码:1234…

后端程序员利用 AI 给网站制作专业 favicon

看看你的 Chrome 浏览器顶部的标签页,每个标签页前面有一个小小的图标,这个就是 favicon,如果你将网页保存到收藏夹,前面也会是这个小图标。这个图标有时候就是网站的 Logo,有时候也不太一样。 上面截图中&#xff0c…

PHP7 +nginx Docker 部署

一、php docker 1、创建php Docker, Dockerfile文件如下 FROM php:7.3.7-fpmRUN mkdir -p /php/myphp 2、启动脚本start.sh,其中会安装php mysql驱动 #!/bin/bash rm -rf myphp unzip myphp.zip cp .env.pro ./myphp cp .env ./myphpdocker rm -f m…

Apifox接口调试工具

1、Apifox简介 Apifox 是集 API 文档、API 调试、API Mock、API 自动化测试多项实用功能为一体的 API 管理平台,定位为 Postman Swagger Mock JMeter。旨在通过一套系统、一份数据,解决多个工具之间的数据同步问题。只需在 Apifox 中定义 API 文档&a…

leetcode-合并二叉树-90

题目要求 思路 1.如果两个结点都存在,就把对应的val加起来创建一个新的结点 2.如果有一个结点不存在,就用村在的那个结点 3.最后返回创建的头结点 代码实现 /*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* Tre…

【鸿蒙应用】理财App

目录 第一节项目讲解项目介绍 第二节:项目创建登录静态框架编写登录页面设稿新建项目控制台添加项目Login页面封装标题组件 第三节:登录页静态表单编写第四节—内容页架构分析底部栏组件第五节—底部栏组件切换第六节:首页静态页编写第七节&a…

第十、十一章、十二章 折线图 + 地图 + 柱状图的绘制

第十章 折线图的绘制 官网:pyecharts - A Python Echarts Plotting Library built with love. 画廊官网:Document 懒人工具:懒人工具-手机APP工具下载-手机软件下载大全 - 173软件站 (ab173.com) 导学 json 定义 (1&#xff…

js的算法-交换排序(冒泡)

交换排序 所谓交换排序,是指根据序列中两个元素关键字的比较结果来对换这两个记录在序列中的位置。基于交换的排序算法很多,本次介绍冒泡排序和快速排序。 冒泡 基本思想 从后往前(或从前往后)两两比较相邻元素的值&#xff0…

开启医疗数据新纪元:山海鲸可视化智慧医疗解决方案

在数字化浪潮席卷而来的今天,智慧医疗作为医疗行业的创新力量,正以其独特的技术优势,推动着医疗服务的升级和变革。而在这场变革中,山海鲸可视化以其出色的数据可视化能力,为智慧医疗提供了强大的技术支持,…

PMP®考试的形式、题型、考试内容和趋势

PMP考试形式: 国内的PMP考试是由中国国际人才交流基金会和PMI共同组织举办,统一采取的都是线下笔试。一年考4次,今年的考试安排在3月、6月、8月、11月。3月10日的PMP考试已结束,接下来是6月份的考试,考试时间预计在6月…

qt tcp 连接 秒断连

问题: tcp连接总是秒成功后断连 debug会出现下面这些 onecore\net\netprofiles\service\src\nsp\dll\namespaceserviceprovider.cpp(550)\nlansp_c.dll!00007FFDA2A1D93D: (caller: 00007FFDD8BEACF6) LogHr(1) tid(336c) 8007277C ¡£¡£ one…

一例MFC文件夹病毒的分析

概述 这是一个MFC写的文件夹病毒,通过感染USB设备传播,感染后,会向c2(fecure.info:443)请求指令来执行。 样本的基本信息 Verified: Unsigned Link date: 19:52 2007/7/5 MachineType: 32-bit MD5: 4B463901E5858ADA9FED28FC5…

CJSON工具类

4.4.3.CJSON工具类 OpenResty提供了一个cjson的模块用来处理JSON的序列化和反序列化。 官方地址: https://github.com/openresty/lua-cjson/ 1)引入cjson模块: local cjson require "cjson"2)序列化: …

STM32学习和实践笔记(21):定时器中断实验

通用定时器配置步骤如下: 第一步:使能定时器时钟 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE);//使能TIM4时钟 第二步:初始化定时器参数,包含自动重装值,分频系数,计数方式等 voidTIM_TimeBaseInit(TIM_T…

YJW-10000微机控制电液伺服压剪试验机

一、项目概述 YJW-10000微机控制电液伺服压剪试验机采用油缸下置式、四立柱结构,机架刚度强度高,变形小,满足公路、铁路桥梁板式、盆式、球型支座的检测要求,试验空间无级可调,方便不同高度的试验需求。采用试金自主研…