【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会快速切换,给外界的感觉就是所有的线程都在运行,这就是并发。 并行

【毕设绝技】基于 SpringCloud 的在线交易平台商城的设计与实现(一)

毕业设计是每个大学生的困扰,让毕设绝技带你走出低谷迎来希望! 基于 SpringCloud 的在线交易平台商城的设计与实现 一、摘 要 随着互联网的快速发展,人们对商品经济的消费和思考不再停留在传统的经济模式上,网上购物商城是企业与…

安卓手机APP开发__媒体开发部分__常见问题答疑解惑

安卓手机APP开发__媒体开发部分__常见问题答疑解惑 目录 1.修复"Cleartext HTTP traffic not permitted"错误 2.修复"SSLHandshakeException", "CertPathValidatorException" 和 "ERR_CERT_AUTHORITY_INVALID" 错误 3.为什么一些媒…

vue3第二十三节(全局属性方法应用)

vue2 与 vue3 的全局属性使用方法区别 1、globalProperties getcurrentinstace vue3 中已经移除对外暴露 getcurrentinstace,建议使用下面两种 2、provide | inject 3、mitt 事件总线程 1、vue2 通过 prototype 实例上挂载属性/方法,用于全局调用 // main.js import Vue from…

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

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

git submudles 代码如果提交到一个ID 上

要将git submudles代码提交到一个ID上,可以按照以下步骤进行操作: 1. 确保已将本地仓库更新到远程仓库最新版本,避免提交出现冲突。 2. 进入子模块目录,进行添加、修改等操作,并使用git add暂存更改。 3. 使用git c…

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

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

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

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

深入探索Android Service:后台服务的终极指南(下)

引言 Service组件在Android应用中扮演着至关重要的角色,尤其是在执行后台任务和进程间通信时。然而,Service的不当使用可能会导致性能问题,甚至影响系统稳定性。本文将深入探讨Service性能优化技巧的最佳实践。 一、Service性能优化策略 Ser…

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

文章目录 一、什么是程序?二、什么是进程?三、进程与程序有什么区别?四、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…

【C语言】typedef

为一个数据类型起一个新的别名 typedef int INTEGER; INTEGER a,b; a1; b2;typedef char ARRAY20[20]; ARRAY20 a1,a2,s1,s2;typedef struct stu{char name[20];int age;char sex; }STU; STU body1,body2;typedef int (*PTR_TO_ARR)[4]; PTR_TO_ARR p1,p2;typedef int (*PTR_TO…

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…

Nginx代理MinIO时出现“Access Denied“错误

MinIO与Nginx集成时&#xff0c;如果出现"Access Denied"错误&#xff0c;通常意味着Nginx代理的请求没有被正确地转发到MinIO服务。 出现错误&#xff1a; <Error><Code>AccessDenied</Code><Message>Access Denied.</Message><…

leetcode-合并二叉树-90

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

【鸿蒙应用】理财App

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

注释掉的代码们

<!--从后端接受来的数据展示&#xff0c;所以vo中有什么这里可以选择写什么&#xff0c;所以可以写自定义的一些name--><!--数据需要返回后端所以数据库后端需要什么样的数据绑什么样的数据&#xff0c;存的是教师id不是name-->import {TreeSelect} from ‘bestvik…

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

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