当前位置: 首页 > news >正文

Oracle 执行计划中的 ACCESS 和 FILTER 详解

Oracle 执行计划中的 ACCESS 和 FILTER 详解

在 Oracle 执行计划中,ACCESSFILTER 是两个关键的操作类型,它们描述了 Oracle 如何检索和处理数据。理解这两个概念对于 SQL 性能调优至关重要。

ACCESS(访问)

ACCESS 表示 Oracle 通过索引或直接访问表的方式来获取数据。

特点

  1. 索引访问:通常通过索引快速定位数据
  2. 高效检索:直接访问所需数据块,减少I/O
  3. 访问路径:包括索引唯一扫描(INDEX UNIQUE SCAN)、索引范围扫描(INDEX RANGE SCAN)等

常见 ACCESS 操作类型

操作类型描述示例
INDEX UNIQUE SCAN通过唯一索引查找单行主键查找
INDEX RANGE SCAN通过索引查找多行WHERE id BETWEEN 100 AND 200
INDEX FULL SCAN全索引扫描需要索引列但无过滤条件
INDEX FAST FULL SCAN快速全索引扫描类似全表扫描但只读索引
TABLE ACCESS FULL全表扫描无合适索引时
TABLE ACCESS BY INDEX ROWID通过索引ROWID访问表索引覆盖不全时

ACCESS 示例

-- 索引唯一扫描示例
EXPLAIN PLAN FOR
SELECT * FROM employees WHERE employee_id = 100;-- 执行计划中会出现:
-- | Id | Operation                   | Name          |
-- |----|-----------------------------|---------------|
-- |  0 | SELECT STATEMENT            |               |
-- |  1 |  TABLE ACCESS BY INDEX ROWID| EMPLOYEES     |
-- |  2 |   INDEX UNIQUE SCAN         | EMP_ID_PK     |

FILTER(过滤)

FILTER 表示 Oracle 对已获取的数据应用额外的过滤条件。

特点

  1. 后置过滤:在获取数据后应用条件
  2. 性能影响:可能导致处理更多数据
  3. 常见场景:无法使用索引的条件、函数条件等

常见 FILTER 操作场景

  1. 对索引列应用函数:

    WHERE UPPER(last_name) = 'SMITH'
    
  2. 使用不等于(!=或<>)操作:

    WHERE department_id != 10
    
  3. 使用OR条件:

    WHERE department_id = 10 OR salary > 5000
    
  4. 使用LIKE以通配符开头:

    WHERE last_name LIKE '%SMITH%'
    

FILTER 示例

-- 过滤条件示例
EXPLAIN PLAN FOR
SELECT * FROM employees WHERE salary > 5000 AND UPPER(last_name) = 'SMITH';-- 执行计划中可能出现:
-- | Id | Operation         | Name      |
-- |----|-------------------|-----------|
-- |  0 | SELECT STATEMENT  |           |
-- |* 1 |  TABLE ACCESS FULL| EMPLOYEES |
--
-- Predicate Information:
-- 1 - filter("SALARY">5000 AND UPPER("LAST_NAME")='SMITH')

ACCESS 与 FILTER 对比

特性ACCESSFILTER
执行时机数据获取阶段数据获取后
效率通常高效可能低效
索引使用通常使用索引通常不使用索引
优化目标尽可能多使用尽可能减少
典型操作索引扫描条件过滤

性能优化建议

  1. 将FILTER转为ACCESS

    • 为常用查询条件创建合适索引
    • 重写SQL避免对索引列使用函数
  2. 复合索引策略

    -- 创建复合索引支持多列查询
    CREATE INDEX emp_name_salary_idx ON employees(last_name, salary);
    
  3. 避免全表扫描

    • 确保查询能使用索引
    • 使用INDEX提示强制使用索引
  4. 函数索引

    -- 为函数条件创建函数索引
    CREATE INDEX emp_upper_name_idx ON employees(UPPER(last_name));
    
  5. 统计信息更新

    -- 确保统计信息准确
    EXEC DBMS_STATS.GATHER_TABLE_STATS('HR', 'EMPLOYEES');
    

实际案例分析

案例1:将FILTER转为ACCESS

问题SQL

SELECT * FROM orders WHERE TO_CHAR(order_date, 'YYYY-MM') = '2023-01';

执行计划

TABLE ACCESS FULL ORDERSFILTER: TO_CHAR(order_date, 'YYYY-MM') = '2023-01'

优化方案

-- 方案1: 使用范围查询
SELECT * FROM orders 
WHERE order_date >= TO_DATE('2023-01-01', 'YYYY-MM-DD')
AND order_date < TO_DATE('2023-02-01', 'YYYY-MM-DD');-- 方案2: 创建函数索引
CREATE INDEX orders_ym_idx ON orders(TO_CHAR(order_date, 'YYYY-MM'));

案例2:复合索引优化

问题SQL

SELECT * FROM employees 
WHERE department_id = 10 
AND salary > 5000;

执行计划

TABLE ACCESS FULL EMPLOYEESFILTER: department_id = 10 AND salary > 5000

优化方案

-- 创建复合索引
CREATE INDEX emp_dept_sal_idx ON employees(department_id, salary);

优化后执行计划将显示使用索引范围扫描(INDEX RANGE SCAN)。

总结

  1. ACCESS 表示数据检索方式,FILTER 表示数据获取后的过滤
  2. 优化目标是将尽可能多的 FILTER 条件转为 ACCESS 条件
  3. 通过创建合适索引、重写SQL语句可以减少FILTER操作
  4. 使用执行计划工具定期检查SQL性能,识别不必要的FILTER操作

相关文章:

Oracle 执行计划中的 ACCESS 和 FILTER 详解

Oracle 执行计划中的 ACCESS 和 FILTER 详解 在 Oracle 执行计划中&#xff0c;ACCESS 和 FILTER 是两个关键的操作类型&#xff0c;它们描述了 Oracle 如何检索和处理数据。理解这两个概念对于 SQL 性能调优至关重要。 ACCESS&#xff08;访问&#xff09; ACCESS 表示 Ora…...

使用FastAPI微服务在AWS EKS中构建上下文增强型AI问答系统

系统概述 本文介绍如何使用FastAPI在AWS Elastic Kubernetes Service (EKS)上构建一个由多个微服务组成的AI问答系统。该系统能够接收用户输入的提示(prompt)&#xff0c;通过调用其他微服务从AWS ElastiCache on Redis和Amazon DynamoDB获取相关上下文&#xff0c;然后利用AW…...

oracle dblink varchar类型查询报错记录

在使用Oracle DBLink&#xff08;数据库链接&#xff09;查询VARCHAR类型数据时&#xff0c;有时会遇到报错问题。这些错误可能与数据类型转换、字符集设置、数据库版本兼容性等因素有关。本文将详细分析常见的报错原因及其解决方法。 一、常见报错及其原因 1. ORA-01722: in…...

计算人声录音后电平的大小(dB SPL->dBFS)

计算人声录音后电平的大小 这里笔记记录一下&#xff0c;怎么计算已知大小的声音&#xff0c;经过麦克风、声卡录制后软件内录得的音量电平值。&#xff08;文章最后将计算过程整理为Python代码&#xff0c;方便复用&#xff09; 假设用正常说话的声音大小65dB&#xff08;SP…...

Android kernel日志中healthd关键词意义

Android kernel日志中healthd关键词意义 在kernel的healthd日志中会打印电池信息。通常比较关心的是电池温度&#xff0c;剩余电量&#xff0c;电压&#xff0c;电池健康&#xff0c;电池状况等。 level&#xff1a;剩余电量。 voltage&#xff1a;电压。 temperature&#xff…...

操作系统面试问题(4)

32.什么是操作系统 操作系统是一种管理硬件和软件的应用程序。也是运行在计算机中最重要的软件。它为硬件和软件提供了一种中间层&#xff0c;让我们无需关注硬件的实现&#xff0c;把心思花在软件应用上。 通常情况下&#xff0c;计算机上会运行着许多应用程序&#xff0c;它…...

【nestjs】一般学习路线

nestjs中文文档 其实几个月前也对nestjs进行了学习&#xff0c;前前后后看了很多文档、博客&#xff0c;另外也找了相应的代码看了&#xff0c;但最后也还是一知半解&#xff0c;只是知道大概怎么写&#xff0c;怎么用。 这次下定决心再次看一遍&#xff0c;从代码学习到文档…...

多线程面试题总结

基础概念 进程与线程的区别 进程:操作系统资源分配的基本单位,有独立内存空间线程:CPU调度的基本单位,共享进程资源对比: 创建开销:进程 > 线程通信方式:进程(IPC)、线程(共享内存)安全性:进程更安全(隔离),线程需要同步线程的生命周期与状态转换 NEW → RUNNABLE …...

面试常考算法2(核心+acm模式)

15. 三数之和 核心代码模式 class Solution {public List<List<Integer>> threeSum(int[] nums) {List<List<Integer>> ansnew ArrayList<>();Arrays.sort(nums);int lennums.length;int pre2000000;for(int i0;i<len-2;i){while(i<len-…...

虚拟文件系统

虚拟文件系统&#xff08;Virtual File System&#xff0c;VFS&#xff09;是操作系统内核中的一个抽象层&#xff0c;它为不同的文件系统&#xff08;如ext4、NTFS、FAT32等&#xff09;提供统一的访问接口。通过VFS&#xff0c;用户和应用程序无需关心底层文件系统的具体差异…...

机器学习与深度学习的区别与联系:多角度详细分析

机器学习与深度学习的区别与联系&#xff1a;多角度详细分析 引言 随着人工智能技术的快速发展&#xff0c;机器学习和深度学习已成为当今科技领域的核心驱动力。尽管这两个术语经常被一起提及&#xff0c;甚至有时被互换使用&#xff0c;但它们之间存在着明显的区别和紧密的…...

c++:迭代器(Iterator)

目录 &#x1f6aa;什么是迭代器&#xff1f; &#x1f527; 迭代器的本质 为什么不用普通数组或下标&#xff1f; STL容器的迭代器并不是共用一个类型&#xff01; 迭代器的类型&#xff08;Iterator Categories&#xff09; &#x1f4e6; 常见容器的迭代器类型 ✅ 迭…...

MindSpore框架学习项目-ResNet药物分类-数据增强

目录 1.数据增强 1.1设置运行环境 1.1.1数据预处理 数据预处理代码解析 1.1.2数据集划分 数据集划分代码说明 1.2数据增强 1.2.1创建带标签的可迭代对象 1.2.2数据预处理与格式化&#xff08;ms的data格式&#xff09; 从原始图像数据到 MindSpore 可训练 / 评估的数…...

python打卡day20

特征降维------特征组合&#xff08;以SVD为例&#xff09; 知识点回顾&#xff1a; 奇异值的应用&#xff1a; 特征降维&#xff1a;对高维数据减小计算量、可视化数据重构&#xff1a;比如重构信号、重构图像&#xff08;可以实现有损压缩&#xff0c;k 越小压缩率越高&#…...

2025数维杯数学建模B题完整限量论文:马拉松经济的高质量发展思路探索

2025数维杯数学建模B题完整限量论文&#xff1a;马拉松经济的高质量发展思路探索&#xff0c;先到先得 B题完整论文https://www.jdmm.cc/file/2712066/ 近年来&#xff0c;我国马拉松赛事数量呈现 “ 先井喷、后调整、再复苏 ” 的显著 变化。据中国田径协会数据&#xff0c; …...

深入解析WPF中的3D图形编程:材质与光照

引言 在Windows Presentation Foundation (WPF) 中创建三维(3D)图形是一项既有趣又具有挑战性的任务。为了帮助开发者更好地理解如何使用WPF进行3D图形的渲染&#xff0c;本文将深入探讨GeometryModel3D类及其相关的材质和光源设置。 1、GeometryModel3D类简介 GeometryMode…...

python格式化小数加不加f的区别

一直好奇这个f是必须加的吗&#xff0c;但是不论是搜索还是ai都给不出准确的回复&#xff0c;就自己测试了一下 结论是不带f指定的是总的数字个数&#xff0c;包含小数点前的数字 带f的就是仅指小数点后数字个数 需要注意的是不带f的话数字是会用科学计数法表示的&#xff…...

【MySQL】存储引擎 - FEDERATED详解

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;博客仓库&#xff1a;https://gitee.com/JohnKingW/linux_test/tree/master/lesson &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &…...

window 显示驱动开发-线性内存空间段

线性内存空间段是显示硬件使用的经典段类型。 线性内存空间段符合以下模型&#xff1a; 它虚拟化位于图形适配器上的视频内存。GPU 直接访问它;也就是说&#xff0c;无需通过页面映射进行重定向。它在一维地址空间中以线性方式进行管理。 驱动程序将DXGK_SEGMENTDESCRIPTOR结…...

uniapp-商城-46-创建schema并新增到数据库

在后台页面中&#xff0c;数据管理是关键。最初&#xff0c;数据可能是通过代码硬编码在页面中&#xff0c;但这种方式缺乏灵活性和扩展性。为了适应实际需求&#xff0c;应使用数据库来存储数据&#xff0c;允许用户自行添加和更新信息。通过数据库&#xff0c;后台页面可以动…...

Go语言的宕机恢复,如何防止程序奔溃

Go语言中的panic机制用于处理程序中无法继续执行的严重错误。当程序触发panic时&#xff0c;当前函数的执行会立即停止&#xff0c;程序开始逐层向上回溯调用栈&#xff0c;执行每个函数的defer语句&#xff0c;直到到达recover函数或者程序崩溃退出。通过recover函数&#xff…...

阅文集团C++面试题及参考答案

能否不使用锁保证多线程安全&#xff1f; 在多线程编程中&#xff0c;锁&#xff08;如互斥锁、信号量&#xff09;是实现线程同步的传统方式&#xff0c;但并非唯一方式。不使用锁保证多线程安全的核心思路是避免共享状态、使用原子操作或采用线程本地存储。以下从几个方面详…...

三款实用电脑工具

今天为大家精心推荐三款实用软件&#xff0c;分别是人声伴奏分离软件、文件夹迁移软件和文字转拼音软件。 第一款&#xff1a;NovaMSS NovaMSS是一款功能强大的人声伴奏分离软件&#xff0c;它提供社区版和专业版&#xff0c;社区版永久免费。 该软件能够一键提取人声、伴奏、…...

【图片识别内容改名】图片指定区域OCR识别并自动重命名,批量提取图片指定内容并重命名,基于WPF和阿里云OCR识别的解决

基于WPF和阿里云OCR的图片区域识别与自动重命名解决方案 应用场景 ​​电商商品管理​​:批量处理商品图片,从固定区域识别商品名称、型号、价格等信息,重命名为"商品名称_型号_价格.jpg"格式​​档案数字化​​:扫描后的合同、文件等图片,从固定位置识别合同编…...

可再生能源中的隔离栅极驱动器:光伏逆变器的游戏规则改变者

在迈向可持续未来的征程中&#xff0c;可再生能源已成为全球发展的基石。在可再生能源中&#xff0c;太阳能以其可及性和潜力脱颖而出。光伏(PV)逆变器是太阳能系统的核心&#xff0c;它严重依赖先进技术将太阳能电池板的直流电转换为可用的交流电。隔离栅极驱动器就是这样一种…...

解决:EnvironmentNameNotFound: Could not find conda environment?

明明创建了环境却找不到&#xff1f; conda env list 查看所有环境 使用绝对路径激活 conda activate /home/guokaiyin/miniconda3/envs/synthocc...

Java SE(10)——抽象类接口

1.抽象类 1.1 概念 在之前讲Java SE(6)——类和对象&#xff08;一&#xff09;的时候说过&#xff0c;所有的对象都可以通过类来抽象。但是反过来&#xff0c;并不是说所有的类都是用来抽象一个具体的对象。如果一个类本身没有足够的信息来描述一个具体的对象&#xff0c;而…...

数据结构与算法—顺序表和链表(1)

数据结构与算法—顺序表&#xff08;1&#xff09; 线性表顺序表概念与结构分类静态顺序表动态顺序表 动态顺序表的实现 线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。线性表是⼀种在实际中⼴泛使⽤的数据结构&#xff0c;常⻅的…...

软件测试的概念

需求的概念 开发模型 测试模型 1. 什么是需求 在多数软件公司&#xff0c;会有两部分需求&#xff0c;⼀部分是⽤⼾需求&#xff0c;⼀部分是软件需求。 1.1 ⽤⼾需求 ⽤⼾需求&#xff1a;可以简单理解为甲⽅提出的需求&#xff0c;如果没有甲⽅&#xff0c;那么就是终端⽤⼾…...

基于Qwen-14b的基础RAG实现及反思

1、概览 本文主要介绍RAG的基础实现过程&#xff0c;给初学者提供一些帮助&#xff0c;RAG即检索增强生成&#xff0c;主要是两个步骤&#xff1a;检索、生成&#xff0c;下面将基于这两部分进行介绍。 2、检索 检索的主要目的是在自定义的知识库kb中查询到与问题query相关的候…...

TikTok广告投放优化指南

1. 广告账户时区设置 在创建广告账户时&#xff0c;建议优先选择美国太平洋时区(UTC-8洛杉矶时间)&#xff0c;这有助于与国际投放节奏保持一致。 2. 达人视频授权问题解答 当在广告后台选择"Affiliate post"却找不到已授权的达人视频时&#xff0c;这种情况确实会…...

WorkManager与Kotlin后台任务调度指南

在Android开发中&#xff0c;使用WorkManager和Kotlin可以高效管理后台任务。以下是分步指南及关键概念&#xff1a; 1. 添加依赖项 在build.gradle文件中添加依赖&#xff1a; dependencies {implementation("androidx.work:work-runtime-ktx:2.7.1") }2. 创建Wor…...

生信服务器如何安装cellranger|生信服务器安装软件|单细胞测序软件安装

一.Why cellranger Cell Ranger 是由 10x Genomics 公司开发的一款用于处理其单细胞测序&#xff08;single-cell RNA-seq, scRNA-seq&#xff09;数据的软件套件。它主要用于将原始测序数据&#xff08;fastq 文件&#xff09;转换为可以用于下游分析的格式&#xff0c;比如基…...

Spring Web MVC基础理论和使用

目录 什么是MVC 什么是SpringMVC SpringMVC基础使用 建立连接 RequestMapping介绍 请求 传递参数 传递对象 参数重命名 传递数组 传递JSON数据 获取URL中参数 上传文件 获取Cookie/Session 获取Header 响应 返回静态页面 RestController和Controller的区别 返…...

Go Modules 的基本使用

在 Go Modules 项目中&#xff0c;首次运行时下载依赖包的正确流程需要根据项目情况区分处理。以下是详细步骤和最佳实践&#xff1a; 一、首次初始化项目的标准流程 1.1 创建项目目录并初始化模块 mkdir myproject && cd myproject go mod init github…...

等保系列(三):等保测评的那些事

一、等保测评主要做什么 1、测评准备阶段 &#xff08;1&#xff09;确定测评对象与范围 明确被测系统的边界、功能模块、网络架构及承载的业务。 确认系统的安全保护等级&#xff08;如二级、三级&#xff09;。 &#xff08;2&#xff09;签订测评合同 选择具备资质的测…...

一种海杂波背景下前视海面目标角超分辨成像方法——论文阅读

一种海杂波背景下前视海面目标角超分辨成像方法 1. 专利的研究目标与实际问题1.1 研究目标1.2 实际意义2. 专利的创新方法、公式及优势2.1 总体思路2.2 关键公式及技术细节2.2.1 运动几何模型2.2.2 方位卷积模型2.2.3 贝叶斯反演与迭代方程2.2.4 参数估计2.3 与传统方法的对比优…...

在线caj转换word

CAJ格式是中国知网特有的一种文献格式&#xff0c;在学术研究等领域广泛使用&#xff0c;但有时我们需要将其转换为Word格式&#xff0c;方便编辑、引用文献。本文分享如何轻松将CAJ转换为word的转换工具&#xff0c;提高阅读和办公效率。 如何将CAJ转换WORD? 1、使用CAJ转换…...

考研英一学习笔记 2018年

2018 年全国硕士研究生招生考试 英语 &#xff08;科目代码&#xff1a;201&#xff09; Section Ⅰ Use of English Directions: Read the following text. Choose the best word(s) for each numbered blank and mark A, B, C or D on the ANSWER SHEET. (10 points) Trust i…...

如何工作的更有职业性

职场中的人&#xff0c;如何让对方对你的评价是你很职业&#xff1f;如何让对方认为你更专业&#xff1f; 这里的职业是形容词 与人沟通的职业性&#xff0c;首当其冲的是你的表达&#xff0c;不管是直接的交流沟通还是文字沟通都清晰明了。 文字沟通 写出来的文字应该尽可…...

transformer 笔记 tokenizer moe

(超爽中英!) 2025吴恩达大模型【Transformer】原理解析教程&#xff01;附书籍代码 DeepLearning.AI_哔哩哔哩_bilibili 自回归就是上文全部阅读 好像学过了&#xff0c;向量互乘好像 transformer不需要rnn 掩码自注意力 训练bert import torch import torch.nn as nn import …...

6.01 Python中打开usb相机并进行显示

本案例介绍如何打开USB相机并每隔100ms进行刷新的代码,效果如下: 一、主要思路: 1. 打开视频流、读取帧 self.cam_cap = cv2.VideoCapture(0) #打开 视频流 cam_ret, cam_frame = self.cam_cap.read() //读取帧。 2.使用定时器,每隔100ms读取帧 3.显示到Qt的QLabel…...

什么是AIOps

AIOps&#xff08;Artificial Intelligence for IT Operations&#xff0c;智能运维&#xff09;是以人工智能技术为核心的新型IT运维模式&#xff0c;通过整合机器学习、大数据分析等技术&#xff0c;实现运维流程的自动化与智能化&#xff0c;从而提升系统稳定性、降低运营成…...

javax.net.ssl.SSLHandshakeException: No appropriate protocol

大家好&#xff0c;我是 程序员码递夫。 我有个SpringBoot项目用到邮件发送功能&#xff0c; 在开发环境运行&#xff0c;一切正常&#xff0c;但是我 部署jar 包&#xff0c;在本机上运行时却报错了&#xff0c; 提示&#xff1a; javax.mail.MessagingException: Could not…...

【身份证识别表格】批量识别身份证扫描件或照片保存为Excel表格,怎么大批量将身份证图片转为excel表格?基于WPF和腾讯OCR的识别方案

以下是基于WPF和腾讯OCR的身份证批量识别与导出Excel的完整方案&#xff1a; 一、应用场景 ​​企业人事管理​​ 新员工入职时需批量录入数百份身份证信息&#xff0c;传统手动录入易出错且耗时。通过OCR自动提取姓名、身份证号等字段&#xff0c;生成结构化Excel表格&#xf…...

Java+Selenium+快代理实现高效爬虫

目录 一、前言二、Selenium简介三、环境准备四、代码实现4.1 创建WebDriver工厂类4.2 创建爬虫主类4.3 配置代理的注意事项 六、总结与展望 一、前言 在Web爬虫技术中&#xff0c;Selenium作为一款强大的浏览器自动化工具&#xff0c;能够模拟真实用户操作&#xff0c;有效应对…...

掌握Multi-Agent实践(三):ReAct Agent集成Bing和Google搜索功能,采用推理与执行交替策略,增强处理复杂任务能力

一个普遍的现象是,大模型通常会根据给定的提示直接生成回复。对于一些简单的任务,大模型或许能够较好地应对。然而,当我们面对更加复杂的任务时,往往希望大模型能够表现得更加“智能”,具备适应多样场景和解决复杂问题的能力。为此,AgentScope 提供了内置的 ReAct 智能体…...

【愚公系列】《Manus极简入门》028-创业规划顾问:“创业导航仪”

&#x1f31f;【技术大咖愚公搬代码&#xff1a;全栈专家的成长之路&#xff0c;你关注的宝藏博主在这里&#xff01;】&#x1f31f; &#x1f4e3;开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主&#xff01; &#x1f…...

SpringBoot统一功能处理

一.拦截器&#xff08;实现两个接口&#xff0c;并重写方法&#xff09; 1. 定义拦截器 ⾃定义拦截器&#xff1a; 实现HandlerInterceptor接⼝&#xff0c; 并重写其所有⽅法 preHandle()⽅法&#xff1a;⽬标⽅法执⾏前执⾏. 返回true: 继续执⾏后续操作; 返回false: 中断后…...

并发设计模式实战系列(19):监视器(Monitor)

&#x1f31f; 大家好&#xff0c;我是摘星&#xff01; &#x1f31f; 今天为大家带来的是并发设计模式实战系列&#xff0c;第十九章监视器&#xff08;Monitor&#xff09;&#xff0c;废话不多说直接开始~ 目录 一、核心原理深度拆解 1. 监视器三要素模型 2. 线程调度…...