并发编程知识精要

保姆级教程:从AD导出Gerber到HFSS 3D Layout导入,搞定PCB电磁仿真全流程 本文提供从Altium Designer导出Gerber文件到Ansys HFSS 3D Layout导入的完整PCB电磁仿真流程指南。详细讲解Gerber文件导出设置、HFSS中的3D模型重建技巧,以及电磁仿真中的常见问题解决方案,帮助工程师高效完成高速电路和射频设计的性能验证。 阅读详情

📕我是廖志伟,一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》(基础篇)、(进阶篇)、(架构篇)清华大学出版社签约作家、Java领域优质创作者、优快云博客专家、阿里云专家博主、51CTO专家博主、产品软文专业写手、技术文章评审老师、技术类问卷调查设计师、幕后大佬社区创始人、开源项目贡献者。

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。不定期分享高并发、高可用、高性能、微服务、分布式、海量数据、性能调优、云原生、项目管理、产品思维、技术选型、架构设计、求职面试、副业思维、个人成长等内容。

Java程序员廖志伟

🌾阅读前,快速浏览目录和章节概览可帮助了解文章结构、内容和作者的重点。了解自己希望从中获得什么样的知识或经验是非常重要的。建议在阅读时做笔记、思考问题、自我提问,以加深理解和吸收知识。阅读结束后,反思和总结所学内容,并尝试应用到现实中,有助于深化理解和应用知识。与朋友或同事分享所读内容,讨论细节并获得反馈,也有助于加深对知识的理解和吸收。💡在这个美好的时刻,笔者不再啰嗦废话,现在毫不拖延地进入文章所要讨论的主题。接下来,我将为大家呈现正文内容。

优快云

一、并发编程知识体系

在深入探讨并发编程之前,我们首先需要建立起一个完整的知识体系,这将有助于我们更好地理解和应用相关的概念。

线程基础

线程是程序执行的最小单位,它是操作系统能够进行运算调度的最小单位。在Java中,线程是并发编程的核心。

  1. 线程生命周期:线程从创建到销毁会经历多种状态,包括新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)、等待(Waiting)、超时等待(Timed Waiting)和终止(Terminated)。线程状态之间的转换是由线程的调度策略和同步机制共同决定的。例如,当线程尝试获取一个被其他线程持有的锁时,它会进入阻塞状态。

  2. 线程优先级:Java中的线程优先级分为10个等级,优先级高的线程更有可能被CPU调度。线程优先级是线程调度器进行调度的一个参考因素,但它不是绝对的。调度器可能会根据线程的运行状态、CPU的负载情况等因素来调整线程的执行顺序。

  3. 守护线程:守护线程是服务于其他线程的线程,当其他线程结束时,守护线程也会自动结束。在Java虚拟机中,如果有非守护线程正在运行,虚拟机就不会退出。因此,守护线程通常用于执行一些后台任务,如垃圾回收。

  4. 线程池:线程池是管理一组线程的池对象,它可以有效地管理线程资源,提高应用程序的响应速度。线程池的核心参数配置包括核心线程数、最大线程数、线程存活时间、工作队列大小等。线程池的拒绝策略通常包括CallerRunsPolicy、AbortPolicy、DiscardPolicy和DiscardOldestPolicy等。

    • 核心参数配置:核心线程数决定了线程池在运行时保持的线程数量,即使没有任务执行时也会保持这些线程。最大线程数是线程池能创建的最大线程数。线程存活时间是指线程空闲时可以存活的最长时间。工作队列大小决定了线程池在任务等待执行时的最大等待任务数。

    • 拒绝策略:当线程池达到最大线程数时,拒绝策略会决定如何处理新提交的任务。CallerRunsPolicy会在线程池的线程中运行当前任务,而AbortPolicy会抛出一个异常来拒绝任务,DiscardPolicy会简单地丢弃任务,而DiscardOldestPolicy会丢弃队列中最早的未执行任务。

  5. 同步机制:

    • 悲观锁/乐观锁:悲观锁假设数据在访问过程中会被修改,因此会锁定数据,而乐观锁则假设数据在访问过程中不会修改,只在修改时进行检测。悲观锁通常使用synchronized关键字或ReentrantLock实现,而乐观锁则使用CAS(Compare-And-Swap)操作。

    • 读写锁:读写锁允许多个线程同时读取数据,但只允许一个线程写入数据。读写锁可以提高读操作的并发性,同时保证写操作的原子性。读写锁的实现通常使用读写锁(ReadWriteLock)接口。

    • 条件变量:条件变量允许线程在某些条件不满足时等待,直到条件被满足时才继续执行。条件变量通常与Object的wait()、notify()和notifyAll()方法一起使用。

  6. 并发集合:

    • ConcurrentHashMap:线程安全的HashMap,采用分段锁机制。它将数据分成多个段,每个段有自己的锁,从而允许多个线程同时访问不同的段。

    • CopyOnWrite容器:在写操作时复制底层数据结构,适用于读多写少的场景。每次写操作都会创建一个新的副本,从而避免了对共享数据的并发修改。

  7. BlockingQueue:线程安全的队列,支持生产者-消费者模型。BlockingQueue提供了一系列的阻塞方法,如put()、take()和offer()等,这些方法会在队列满或空时自动阻塞。

  8. 并发工具类:

    • Phaser:Phaser是一个可扩展的同步工具,用于线程间的协作。它允许一组线程在执行过程中同步,并支持动态增加或减少参与者。

    • Exchanger:允许两个线程交换数据。当两个线程都准备好交换数据时,Exchanger会交换它们的数据。

    • FutureTask:FutureTask是一个可以异步执行的计算任务。它代表了一个尚未完成的计算任务,并提供了一个方法来获取计算结果。

  9. 非阻塞算法:

    • CAS原理:Compare-And-Swap,即比较并交换,是一种无锁操作。它通过原子操作比较内存中的一个值和一个预期的值,如果相等,则将内存中的值替换为新的值。

    • Atomic类:提供原子操作的类,如AtomicInteger、AtomicLong等。这些类通过使用CAS操作来保证操作的原子性。

    • 无锁队列:基于CAS原理实现的线程安全队列。它通过原子操作来保证队列的线程安全,从而避免了锁的开销。

  10. 并发框架:

    • Netty线程模型:Netty采用主从多线程模型,主线程负责接收连接,从线程负责处理业务逻辑。这种模型可以有效地处理高并发连接。

    • Akka Actor模型:Akka是一个基于Actor模型的高性能并发框架。Actor是一个消息传递的实体,它通过发送和接收消息来执行任务。

    • Disruptor环形缓冲区:Disruptor是一个高性能的并发队列,适用于高并发场景。它使用环形缓冲区和CAS操作来保证线程安全,从而避免了锁的开销。

二、MyBatis知识体系

MyBatis是一个优秀的持久层框架,它消除了几乎所有的JDBC代码和手动设置参数以及获取结果集的工作。

SQL映射
  1. 注解映射:使用注解的方式定义SQL映射关系,简化了XML配置。注解映射通过@Select、@Insert、@Update和@Delete等注解来定义SQL语句。

  2. 结果集映射:将数据库中的数据映射到Java对象中。结果集映射可以通过@Results、@Result和@One、@Many等注解来实现。

  3. 关联查询:支持多表关联查询,将多个表的数据映射到Java对象中。关联查询可以通过@One和@Many注解来实现。

  4. 动态SQL:根据条件动态构建SQL语句。动态SQL可以通过@SelectProvider、@SqlProvider和OGNL表达式来实现。

    • OGNL表达式:用于构建动态SQL,表达式简单易懂。OGNL表达式可以直接访问Java对象的属性和集合。

    • 分支语句:根据条件执行不同的SQL片段。分支语句可以通过 、 、 和 等标签来实现。

    • 批量操作:支持批量插入、更新和删除操作。批量操作可以通过 标签来实现。

  5. 缓存机制:

    • 一级缓存:SqlSession级别的缓存,默认开启。一级缓存缓存了从数据库中查询到的数据,当再次查询相同的数据时,可以直接从缓存中获取。

    • 二级缓存:Mapper级别的缓存,需要手动配置。二级缓存缓存了Mapper级别的数据,当再次查询相同的数据时,可以直接从缓存中获取。

    • 自定义缓存:支持自定义缓存实现。自定义缓存可以通过实现Cache接口来实现。

  6. 代理模式:MyBatis使用代理模式实现Mapper接口。代理模式允许在运行时动态创建对象,并拦截对象的调用。

  7. MapperProxy:Mapper接口的代理实现,负责执行SQL语句。MapperProxy通过代理模式实现了Mapper接口,并负责执行SQL语句。

  8. 插件拦截:MyBatis支持插件拦截,可以自定义拦截器实现扩展功能。插件拦截器可以拦截MyBatis的执行过程,如查询、更新、插入和删除等。

  9. 动态代理执行流程:

    • 创建MapperProxy代理对象。
    • 执行代理对象的invoke方法。
    • 调用MyBatis的executor执行器。
    • 执行器调用Configuration对象。
    • Configuration对象调用MappedStatement对象。
    • MappedStatement对象执行SQL语句。
  10. SqlSession生命周期:

    • 创建SqlSession对象。
    • 使用SqlSession执行数据库操作。
    • 关闭SqlSession对象。
  11. 执行器类型:

    • 简单执行器:适用于单条SQL语句的执行。简单执行器直接执行SQL语句,并返回结果。

    • 批量执行器:适用于批量SQL语句的执行。批量执行器将多个SQL语句合并成一个批量操作,从而提高执行效率。

  12. 延迟加载:延迟加载可以在查询数据时只加载需要的数据。延迟加载通过在查询时只加载必要的数据,从而减少数据的加载时间和内存消耗。

  13. 扩展机制:

    • 类型处理器:用于处理Java类型和数据库类型之间的转换。类型处理器可以自定义转换规则,从而实现更灵活的数据类型转换。

    • 拦截器链:拦截器链可以拦截MyBatis的执行过程,实现扩展功能。拦截器链可以自定义拦截器,从而实现自定义的扩展功能。

    • 方言支持:MyBatis支持多种数据库方言,如MySQL、Oracle等。方言支持可以通过实现Dialect接口来实现。

优快云

📥博主的人生感悟和目标

Java程序员廖志伟

希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励!

- 💂 博客主页: Java程序员廖志伟
- 👉 开源项目: Java程序员廖志伟
- 🌥 哔哩哔哩: Java程序员廖志伟
- 🎏 个人社区: Java程序员廖志伟
- 🔖 个人微信号: SeniorRD

Java程序员廖志伟

📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持!

🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~

图神经网络实战(1)——图神经网络(Graph Neural Networks, GNN)基础 本节全面介绍了图神经网络 (Graph Neural Network, GNN) ,包括其在数据分析和机器学习中的重要性。首先探讨了图作为数据表示的相关概念及其在各个领域的广泛应用;然后深入探讨图学习的重要性,包括不同的应用和技术。最后,重点介绍了 GNN 架构,并对比了它与其他方法之间的原理和性能差异。 阅读详情

相关推荐

SRRC型号核准的模块豁免规则解析——如何利用完整型模块简化设备认证流程

本文详细解析了SRRC型号核准中模块豁免规则的应用,重点介绍了完整型模块的技术定义、豁免条件及实际应用场景。通过合理利用完整型模块,企业可显著简化设备认证流程,缩短上市周期并降低成本。文章还提供了模块选型指南和常见问题解决方案,帮助工程师高效应对SRRC认证挑战。

weixin_29306011的博客 934

Java 并发编程面试核心知识点精要

Java并发编程面试核心知识点摘要: notify()与notifyAll()区别 notify()随机唤醒一个线程,notifyAll()唤醒所有线程 notifyAll()更安全,避免线程饥饿和信号丢失 锁范围选择原则 最小粒度同步,仅锁定临界区 避免在同步块内执行耗时操作 使用专用锁对象替代this锁定 线程停止方法 推荐使用中断机制(interrupt) 配合volatile标志位控制 线程池通过shutdown()+awaitTermination()关闭 synchronized与Lock对比

2201_75941872的博客 699

Linux:在使用UEFI固件的计算机上内核是如何被启动的

启动计算机通常不是一件难事:按下电源键,稍等片刻,你就能看到一个登录界面,再输入正确的密码,就可以开启一天的网上冲浪之旅了。但偶尔这件事没那么顺利,有时候迎接你的不是熟悉的登录界面,而是一个令人生畏的命令提示符界面,一闪一闪的提示符告诉你:“你碰到麻烦了”。于是你对着错误提示查找解决方法,按照网页上的步骤,你对着提示符输入并执行了几条你完全不理解的命令,计算机又能正常启动了,但同时你发现你那存有大学舍友糗照的硬盘分区被清空了。

imred的专栏 3069

《3 小时吃透 Go 语言基础:浓缩版知识点梳理》

可通过官方 Playground 实时演练代码片段。注:本提纲覆盖 80% 日常开发场景,重点掌握。

ewghjjjkjkjl的博客 202

智能车竞赛循迹控制:基于状态机的直道、弯道、十字路口处理策略

在嵌入式系统与自动控制领域,PID控制算法是实现精确运动控制的基础。其原理是通过比例、积分、微分三个环节的线性组合,对系统误差进行实时校正,从而实现对目标值的快速、稳定跟踪。这项技术的核心价值在于为各类自动控制系统提供了稳定、可靠且易于实现的解决方案,广泛应用于机器人、无人机、工业自动化等场景。在智能车循迹这类特定应用中,赛道环境复杂多变,单一的PID控制器难以应对直道、弯道、十字路口等不同赛道元素的控制需求。此时,有限状态机(FSM)作为一种高效的**决策框架**,能够根据实时感知的赛道特征(如边线曲率、

weixin_34034261的博客 283

【高清照片】深圳光博会看PCIe Over Fibre 实现方案

本文分析了PCIe over Fibre技术及其在数据中心的应用前景。该技术通过光纤延伸PCIe总线,解决了传统铜缆距离限制问题,支持跨机架资源池化。目前主要有两种实现方式:CDFP混合光缆方案和Retimer转接卡方案,各有优缺点。文章还探讨了CDFP接口的现状、低速信号传输解决方案,以及PCIe速率与光通信发展的对应关系。最后对比了PCIe光缆与以太网光缆的关键差异,指出PCIe光互连在协议透明度和边带信号处理上的特殊要求。随着标准推进,PCIe over Fibre将成为数据中心扩展高带宽、低时延互连

Saniffer的博客 1393

并发编程与MyBatis精要

📘拥有多年一线研发和团队管理经验,研究过主流框架的底层源码(Spring、SpringBoot、SpringMVC、SpringCloud、Mybatis、Dubbo、Zookeeper),消息中间件底层架构原理(RabbitMQ、RocketMQ、Kafka)、Redis缓存、MySQL关系型数据库、 ElasticSearch全文搜索、MongoDB非关系型数据库、Apache ShardingSphere分库分表读写分离、设计模式、领域驱动DDD、Kubernetes容器编排等。

我是Java程序员廖志伟,感谢朋友们的支持!不定期贡献一篇高品质、过万文字、图文并茂且附有视频解说、满载代码示例注释的良心之作,坚决杜绝粗制乱造。 1032

大疆A型板使用经验分享(四)—— PWM和舵机SG996的控制

一. j

weixin_43361652的博客 3881
上一篇: 并发编程与MyBatis精讲
下一篇: Dubbo与Zookeeper核心解析
Java开发廖志伟
博客等级 码龄2年 3491粉丝 1534原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值