并发编程与MyBatis精讲

BQ25798双电源输入4节电池升降压充电与最大功率跟踪于光伏板应用 介绍一颗具有窄范围直流电压NVDC、路径管理PPMT、光伏板最大功率跟踪及反向放电OTG升降压充电控制器,带I2C接口能对内部寄存器做控制 阅读详情

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

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

Java程序员廖志伟

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

优快云

【一、并发编程知识体系】

线程基础

  1. 线程生命周期:线程的生命周期是由JVM管理的,其状态变化遵循一定的规则。在Java中,线程的生命周期主要包括以下状态:

    • 新建(New):线程对象被创建,但尚未启动。
    • 就绪(Runnable):线程已经准备好运行,等待被CPU调度。
    • 运行(Running):线程正在执行。
    • 阻塞(Blocked):线程因等待某个资源或等待某个事件发生而无法继续执行。
    • 等待(Waiting):线程在等待某个条件成立,通过Object.wait()方法进入等待状态。
    • 超时等待(Timed Waiting):线程在等待某个条件成立,但设置了一个超时时间,通过Object.wait(long timeout)方法进入。
    • 终止(Terminated):线程执行完毕或因异常终止。
  2. 线程优先级:Java中的线程优先级分为最高(MAX_PRIORITY)、正常(NORM_PRIORITY)和最低(MIN_PRIORITY)三个等级,优先级高的线程在多线程环境中更可能获得CPU执行时间。

  3. 守护线程:在Java中,守护线程是一种特殊的线程,其生命周期由主程序控制。当所有非守护线程执行完毕后,程序将自动退出,此时守护线程也会随之结束。

  4. 线程池:线程池的核心实现依赖于一个工作队列,用于存储待执行的任务。当有任务提交到线程池时,首先会检查核心线程数是否已满,如果未满,则创建新线程执行任务;如果已满,则根据拒绝策略处理。

    • 核心参数配置:核心线程数决定了线程池的初始线程数;最大线程数决定了线程池能创建的最大线程数;线程活跃时间决定了线程在空闲时多久后被回收;任务队列决定了任务如何存储;拒绝策略决定了当任务无法被处理时如何处理。

    • 拒绝策略:常见的拒绝策略包括:CallerRunsPolicy(调用者运行策略)、AbortPolicy(抛出异常策略)、DiscardPolicy(丢弃策略)和DiscardOldestPolicy(丢弃最旧策略)。

    • 工作队列类型:工作队列可以是数组、链表、阻塞队列等。

    • 同步机制:线程池内部通过锁机制保证线程安全,如ReentrantLock、Semaphore等。

  5. 并发集合:在Java中,并发集合如ConcurrentHashMap、CopyOnWriteArrayList等,通过锁机制或无锁算法实现线程安全。

  6. BlockingQueue:BlockingQueue是一个线程安全的队列,其内部通过锁机制保证线程安全,支持生产者-消费者模型。

  7. 并发工具类:Phaser是一个线程同步工具,用于解决线程间的同步问题;Exchanger允许两个线程交换数据;FutureTask是一个异步计算任务,用于获取计算结果。

  8. 非阻塞算法:CAS(Compare-And-Swap)是一种无锁算法,用于实现原子操作;Atomic类提供了一系列原子操作的方法;无锁队列通过无锁算法实现线程安全。

  9. 并发框架:Netty线程模型采用主从多线程模式,提高并发性能;Akka Actor模型采用消息传递机制,实现并发编程;Disruptor环形缓冲区通过环形队列和CAS算法实现高并发。

【二、MyBatis知识体系】

  1. SQL映射:MyBatis通过XML或注解的方式,将Java对象与数据库表进行映射。XML映射文件中定义了SQL语句、参数、结果集映射等;注解映射则通过在Java接口或方法上添加注解实现映射。

  2. 注解映射:MyBatis提供了多种注解,如@Select、@Insert、@Update、@Delete等,用于映射SQL语句。例如,@Select注解用于映射查询语句,@Insert注解用于映射插入语句。

  3. 结果集映射:MyBatis将数据库查询结果映射为Java对象,通过ResultMap实现。ResultMap定义了结果集字段与Java对象属性的映射关系。

  4. 关联查询:MyBatis支持多表关联查询,通过嵌套查询或关联映射实现。嵌套查询通过

  5. 标签实现;关联映射通过@One、@Many注解实现。 动态SQL:MyBatis支持动态SQL,如OGNL表达式、分支语句、批量操作等。通过、、等标签实现动态SQL。 缓存机制:MyBatis提供了缓存机制,包括一级缓存和二级缓存。 一级缓存:MyBatis会为每个SqlSession对象创建一个本地缓存,用于存储最近执行的SQL语句及其结果。 二级缓存:MyBatis支持跨SqlSession的缓存,通过实现Cache接口自定义缓存。二级缓存可以跨SqlSession持久化,但需要在全局范围内配置。 自定义缓存:通过实现Cache接口,可以自定义缓存策略,如LRU、FIFO等。 代理模式:MyBatis使用代理模式实现了Mapper接口的动态代理,从而实现了Mapper接口的延迟加载。 MapperProxy:MapperProxy是MyBatis中用于实现Mapper接口动态代理的类,通过JDK动态代理技术实现。 插件拦截:MyBatis支持插件拦截,如执行器拦截、动态代理执行流程拦截等。通过实现Interceptor接口,可以自定义插件拦截逻辑。 SqlSession生命周期:SqlSession是MyBatis的核心对象,负责执行SQL语句。SqlSession的生命周期包括创建、使用、提交、回滚、关闭等。 执行器类型:MyBatis提供了多种执行器类型,如SimpleExecutor、ReuseExecutor、BatchExecutor等。SimpleExecutor为简单执行器,ReuseExecutor为重用预处理语句执行器,BatchExecutor为批量执行器。 延迟加载:MyBatis支持延迟加载,如加载关联对象时,仅在需要时才进行加载。通过@Lazy注解实现延迟加载。 扩展机制:MyBatis提供了多种扩展机制,如类型处理器、拦截器链、方言支持等。通过实现相应的接口,可以自定义扩展功能。 通过以上知识点的串联,我们可以深入理解并发编程和MyBatis在Java开发中的应用。以下是一些应用场景: 线程池与MyBatis:在执行数据库操作时,可以使用线程池来提高并发性能。MyBatis支持自定义执行器,可以通过配置线程池实现数据库操作的并发优化。 并发集合与MyBatis:在处理MyBatis的缓存时,可以使用并发集合来保证线程安全。 非阻塞算法与MyBatis:在实现MyBatis的动态SQL时,可以使用非阻塞算法提高性能。 并发框架与MyBatis:在构建大型分布式系统时,可以使用并发框架与MyBatis结合,实现高性能、高可靠性的数据库操作。 总之,掌握并发编程和MyBatis知识,可以帮助我们更好地设计和实现高性能、高可靠的Java应用程序。 📥博主的人生感悟和目标 希望各位读者大大多多支持用心写文章的博主,现在时代变了,信息爆炸,酒香也怕巷子深,博主真的需要大家的帮助才能在这片海洋中继续发光发热,所以,赶紧动动你的小手,点波关注❤️,点波赞👍,点波收藏⭐,甚至点波评论✍️,都是对博主最好的支持和鼓励! - 💂 博客主页: Java程序员廖志伟 - 👉 开源项目:Java程序员廖志伟 - 🌥 哔哩哔哩:Java程序员廖志伟 - 🎏 个人社区:Java程序员廖志伟 - 🔖 个人微信号: SeniorRD 📙经过多年在优快云创作上千篇文章的经验积累,我已经拥有了不错的写作技巧。同时,我还与清华大学出版社签下了四本书籍的合约,并将陆续出版。这些书籍包括了基础篇、进阶篇、架构篇的📌《Java项目实战—深入理解大型互联网企业通用技术》📌,以及📚《解密程序员的思维密码--沟通、演讲、思考的实践》📚。具体出版计划会根据实际情况进行调整,希望各位读者朋友能够多多支持! 🔔如果您需要转载或者搬运这篇文章的话,非常欢迎您私信我哦~
搞定ESD(九):静电放电之PCB设计 不同信号参考地平面应尽量保持完整,减小静电电流流过参考地平面时造成的电位差,防止电位差导致的信号传输电平错误.主芯片GPIO信号布线应保持最短化,减小与参考地平面之间的电场耦合,同时也防止因信号环路面积较大耦合静电放电噪声干扰。外部端子接地引脚顶层采用分地设计,最好是直接过孔到完整参考地平面接地,避免与顶层信号包地、其它包地相连,防止顶层串扰耦合到其它信号,造成ESD问题。 阅读详情

相关推荐

vivado2020.1使用vitis生成QSPI启动文件报错

在使用vivado2020.1使用vitis,生成QSPI启动文件时会报错,data2mem命令无法识别,这是因为data2mem是xilinx7series芯片的命令,当使用ultrascale/ultrascale+芯片时则需要使用updatemem命令,这或许是vitis的一个bug吧,明明选择的是ultrascale的芯片,却一直调用打她mem命令,挺麻烦的,需要手动执行,在XSCT console窗口执行的命令如下: updatemem -force -meminfo \ F:/xc7z35t/x

qq_32134427的博客 2336

并发编程与MyBatis知识精讲

允许自定义缓存实现,适用于特殊场景。自定义缓存需要实现Cache接口,并重写相关方法。

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

LAMMPS in文件详解:从零开始手把手教你配置金属分子动力学模拟

本文详细解析了LAMMPS in文件的配置方法,手把手教你完成金属分子动力学模拟的全流程。从软件环境准备、势函数选择,到使用Materials Studio构建模型、编写in文件进行能量最小化与系统弛豫,再到实施单轴拉伸生产模拟并提取应力应变数据,最后通过Python和OVITO进行结果分析与可视化,提供了完整的实战指南和常见问题排查技巧。

weixin_28475533的博客 530

并发编程精讲

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

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

Zigbee通信(CC2530终端 + ESP32-C6协调器)

实现了CC2530 zigbee终端与ESP32-C6 zigbee协调器的通信交互。

Ecsply的博客 2570

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

V-REP(Cooprliesim EDU)自学笔记 实现UR5机械臂末端按轨迹移动

xu_white的博客 7583

并发编程核心知识精讲

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

AIHacksCash的博客 575

保姆级教程:在阿里云ECS上用Docker一键部署EMQX MQTT服务器(Ubuntu 20.04)

本文提供在阿里云ECS上使用Docker一键部署EMQX MQTT服务器的详细教程,涵盖从实例创建、Docker环境配置到EMQX部署与优化的全流程。适合物联网开发者快速搭建高效、安全的MQTT消息服务器,适用于智能家居、工业物联网等场景。

weixin_28739079的博客 308

并发编程与MyBatis深度解析

通过实现Cache接口自定义缓存。

JavaCodePro的博客 624

我用两种方式玩转 MCP:CherryStudio vs VS Code 实测手记

MCP,全称,你可以理解为——给大模型装上“手脚”和“工具箱”。传统大模型像一位博学但手不能动的学者:“我知道怎么算圆周率,但没法打开计算器。而支持 MCP 的模型,能通过标准协议自动调用外部工具(比如fetch网络请求、readFile读文件、shell执行命令),真正做到“知行合一”。输入后**,保存,**之后就显示出来了MCP 不是“魔法”,而是把 AI 从“问答机”升级为“智能代理”的关键一步。工具本身不难,难的是“知道它能解决什么问题”。

zyq569的博客 1023

grafana 配置页面告警

Rate 下拉选择也可,保持默认也可。By label 选择一个比如选择filename。配置无数据或者错误数据的时候如何处理,这里选择 Normal (表示当做正常不会告警)单机 node_name 标签,选择一个主机,选好后单机 Show logs。单机 New floder,如果之前配置过,也可以选择。单机 Save contact point 保存即可。会跳出如下对话框(如果没有跳出就自己单机选择下)完成后会自动生成如下图,告警规则部分就配置好了。选择告警接收方式(这里选择企业微信 WeCon)

weixin_40548182的博客 3254

并发编程与MyBatis核心解析

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

AIHacksCash的博客 945

告别电源纹波!手把手教你用UCC28019设计一个高效率PFC模块(附完整原理图与BOM清单)

本文详细介绍了如何使用UCC28019设计高效率PFC模块,解决电源纹波问题。通过优化补偿网络、关键元器件选型及PCB布局,实现功率因数提升至0.99以上,降低输入电流谐波。附完整原理图与BOM清单,适用于电赛等快速开发场景。

weixin_42652674的博客 338

并发编程与MyBatis精髓

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

JavaCodePro的博客 895

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

并发编程与MyBatis解析

MyBatis允许自定义缓存实现,以适应特定的应用场景。自定义缓存可以通过实现Cache接口来实现。

MoneyHacksPro的博客 868

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值