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

ops/2024/10/18 14:16:37/

在这里插入图片描述

文章目录

  • 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.ppmy.cn/ops/15602.html

相关文章

安卓studio插件开发(一)本地搭建工程

下载idea 社区版本 建立IDE Plugin工程 点击create就行,新建立的工程长这样 比较重要的文件 build.gradle:配置工程的参数 plugin.xml:设置插件的Action位置 build.gradle.kts内容如下: plugins {id("java")id(&quo…

c++模板初阶

1. 泛型编程 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。 使用函数重载实现一个通用的交换函数,虽然可以实现,但是有几个不好的地方: 1. 重载的函数仅仅是类型不同&#xff0c…

【LeetCode】191. 位1的个数

题目链接:191. 位1的个数 题目描述: 解法1:题意很简单就不说了,这里先说一种最简单的解法,首先我们知道一点:n&(n-1)相当于把是将n的二进制位中最低位的1变为了0,其它位保持不变&#xff0…

【C++】:拷贝构造函数和赋值运算符重载

目录 一,拷贝构造函数1. 什么是拷贝构造函数2. 拷贝构造函数的特性3. 实践总结 二,赋值运算符重载2.1 运算符重载2.2 赋值运算符重载 一,拷贝构造函数 1. 什么是拷贝构造函数 拷贝构造函数是特殊的构造函数。是用一个已经存在的对象&#x…

bit、进制、位、时钟(窗口)、OSI七层网络模型、协议、各种码

1.bit与进制 (个人理解,具体电路是非常复杂的) 物理层数据流,bit表示物理层数据传输单位, 一个电路当中,通过通断来表示数字1和0 两个电路要通讯,至少要两根线,一根作为电势参照…

ubuntu安装QEMU

qemu虚拟机的使用(一)——ubuntu20.4安装QEMU_ubuntu安装qemu-CSDN博客 遇到的问题: (1)本来使用git clone https://github.com/qemu/qemu.git fatal: 无法访问 https://github.com/qemu/qemu.git/:GnuTLS recv error (-110): …

pycharm永久改变sys.path

进入pycharm,选择file->settings->interpreter 在这里选择图中所示show all 再单击左上角减号右侧第三个,长得像思维导图的图标 之后添加你的路径,确认即可

npm 常用命令详解

npm(Node Package Manager)是 Node.js 的包管理工具,用于安装、管理和发布代码包。以下是 npm 常用命令的详解: npm init:初始化一个新的 Node.js 项目,生成一个 package.json 文件,用于管理项目…