前言

MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBatis的实现。

什么是分布式锁?在回答这个问题之前,我们先回答一下什么是锁。

普通的锁,即在单机多线程环境下,当多个线程需要访问同一个变量或代码片段时,被访问的变量或代码片段叫做临界区域,我们需要控制线程一个一个的顺序执行,否则会出现并发问题。

如何控制呢?就是设置一个各个线程都能看的见的标志。然后,每个线程想访问临界区域时,都要先查看标志,如果标志没有被占用,则说明目前没有线程在访问临界区域。如果标志被占用了,则说明目前有线程正在访问临界区域,则当前线程需要等待。

这个标志,就是锁。

在单机多线程的java程序中,我们可以使用堆内存中的变量作为标志,因为多线程是共享堆内存的,堆内存中的变量对于各个线程都是可见的。

讲明白了普通的锁,接下来,我们再看看分布式锁。

在分布式环境下,即多台计算机,每个计算机上会启动jvm执行程序的运行环境下,如果不同计算机上的线程想访问临界区域时,该怎么办呢?

前面普通锁的使用堆内存中的变量的方式肯定不适用了。因为在多机环境下,某台计算机上的堆内存中的变量对于其他计算机上的线程肯定是不可见的。那么,根据锁的本质和原理,我们就要找到另外的对于多机上的线程都可见的标志,以它来作为锁,就可以了。这样的锁,就是分布式锁。

当然,这里只是解释了什么是分布式锁,至于分布式锁该如何实现,其实有多重方式,关键在于要保证锁对多机上的程序是可见的即可。一些常用的实现方式是,使用redis,使用数据库等等。

为什么要使用分布式锁

我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug!

注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间!

分布式锁应该具备哪些条件

在分析分布式锁的三种实现方式之前,先了解一下分布式锁应该具备哪些条件:

  • 1、在分布式系统环境下,一个方法在同一时间只能被一个机器的一个线程执行;

  • 2、高可用的获取锁与释放锁;

  • 3、高性能的获取锁与释放锁;

  • 4、具备可重入特性;

  • 5、具备锁失效机制,防止死锁;

  • 6、具备非阻塞锁特性,即没有获取到锁将直接返回获取锁失败。

分布式锁的三种实现方式

目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性来换取系统的高可用性,系统往往只需要保证“最终一致性”,只要这个最终时间是在用户可以接受的范围内即可。

在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。有的时候,我们需要保证一个方法在同一时间内只能被同一个线程执行。

  • 基于数据库实现分布式锁;

  • 基于缓存(Redis等)实现分布式锁;

  • 基于Zookeeper实现分布式锁;

总结

虽然我个人也经常自嘲,十年之后要去成为外卖专员,但实际上依靠自身的努力,是能够减少三十五岁之后的焦虑的,毕竟好的架构师并不多。

架构师,是我们大部分技术人的职业目标,一名好的架构师来源于机遇(公司)、个人努力(吃得苦、肯钻研)、天分(真的热爱)的三者协作的结果,实践+机遇+努力才能助你成为优秀的架构师。

如果你也想成为一名好的架构师,那或许这份Java成长笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

资料领取方式:戳这里免费下载

c/DSmxTbFJ1cmN1R2dB)**

[外链图片转存中…(img-1yW1wkyv-1624081568752)]

java帮助文档在哪相关推荐

  1. JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载

    JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载 JDK(Java Development Kit,Java开发包,Java开发工具)是一个写Java的applet ...

  2. java docx文档解析_带有docx4j的Java Word(.docx)文档

    java docx文档解析 几个月前,我需要创建一个包含许多表和段落的动态Word文档. 过去,我曾使用POI来实现此目的,但是我发现它很难使用,并且在创建更复杂的文档时对我来说效果不佳. 因此,对于 ...

  3. javadoc - Java API 文档生成器(Windows版本)

    文章目录 简介 命令语法结构 Javadoc Doclets 术语 带文档的类 引用类 外部引用类 源文件 源代码文件 包注释文件 概述注释文件 其他未处理文件 生成的文件 基本内容页 交叉参考页 支 ...

  4. idea java api_intellij idea怎么设置java帮助文档(示例代码)

    打开idea我引用的jar包都放在 Project Structure-->Modules-->libs文件夹(双击) 双击jar包所在文件夹,跳出对话框. 1.如果api对应的javad ...

  5. s3 java sdk_s3javasdk文档.pdf

    s3javasdk文档 S3 Java SDK 文档 前言 简介 对象存储S3接口 Java SDK采用了开源的aws­java­sdk­s3. 本文档主要介绍SDK的安装.使用与注意事项. 假设您已 ...

  6. 终于拿到了阿里2023年度九大Java技术文档——面试题+文档+白皮书

    今天给大家分享一波阿里2023年度九大Java技术文档(包含面试题+文档+白皮书),希望大家能够喜欢!! 70道阿里巴巴高级Java面试题! 2023年阿里巴巴面试参考指南(泰山版) 阿里巴巴1000 ...

  7. Java日志文档怎么写

    Java日志文档怎么写以及各句含义:见注释 ### 设置### //不同的错误类型 从小到大 ### debug--->info(常用)--->warn--->error log4j ...

  8. 项目1:基于Java API文档制作的搜索引擎

    目录 一.搜索引擎相关概念 1.1 认识搜索引擎 1.2 搜索引擎的本质 1.3 搜索的思路 1.3.1  暴力搜索 1.3.2  倒排索引 1.4 项目目标 二.实现思路和前期准备 2.1 项目模块 ...

  9. java 接口文档的格式化_Java Word API - 读写转换处理DOC DOCX HTML PDF HTML格式

    Java Word 文档处理API 先进功能 执行邮件合并 使用邮件合并生成报表 插入格式户文本,段落,图像,表格以及其他内容到Word文档中 使用数据库的检索数据填充到Word文档中的表格 创建邮件 ...

  10. Java基础:01Java语言概述(常见的DOS命令,Java语言的特点、核心机制、环境搭建,HelloWorld,注释,Java API 文档)

    Java基础:01Java语言概述 一.常见的DOS命令 二.Java语言的特点 面向对象性 健壮性 跨平台型 三.Java两种核心机制 1. Java虚拟机 2. 垃圾回收 四.Java语言的环境搭 ...

最新文章

  1. Python3异常-AttributeError: module ‘sys‘ has no attribute ‘setdefaultencoding‘
  2. android短信安全,[原创]分析了一款android短信木马
  3. Linux中搭建一个ftp服务器详解
  4. 类似索引Model套Model之 iOS模型闲聊二
  5. Django框架 之 Ajax
  6. Docker从入门到实战(四)
  7. PhpStorm调用浏览器运行php文件
  8. Go 单元测试--Mock接口实现和对接口打桩
  9. salesforce php,具有自动登录功能的Salesforce php REST API
  10. Linux平台升级chrome浏览器后,再打开会提示:“您的个人资料来自新版 Google Chrome 浏览器,因此无法使用。某些功能可能无法使用。请指定其他个人资料目录,或使用新版本”
  11. android 图片编辑工具,照片编辑器:Photo Editor
  12. Codeforces Round #101 (Div. 2)
  13. 什么是浏览器指纹? 浏览器指纹技术应用有哪些?
  14. 利用opencv带你玩转人脸识别-下篇(人脸录入,数据训练,人脸识别小案例快速入门)
  15. DC综合——学习笔记
  16. 2021阳城一中高考成绩查询,2017阳城一中录取分数线(附2017高考成绩喜报)
  17. python中的pandas的两种基本使用_Python:Pandas的基本操作和使用
  18. 微软CEO鲍尔默失策太多次 应只拿1美元年薪
  19. 移动支付快速崛起,爱贝赋能行业新发展
  20. 数据库概念 第六版 中英文 带目录+习题答案

热门文章

  1. impala 基础知识及使用
  2. Jenkins 流水线语法 02 片段生成器和声明式语法生成器
  3. (六)Linux环境部署(Centos+Nginx+Tomcat+Mysql) - 常用命令总结
  4. 外贸人常用的几种客户开发渠道
  5. MySQL优化系列16-优化MySQL的锁
  6. 一些网络安全的工具软件的介绍
  7. ——java中的反射
  8. PostgreSQL:关于 socket 文件 /tmp/.s.PGSQL.nnnn 丢失处理
  9. Ubuntu 21.04(arm64) 基于sanp安装Nextcloud,挂载本地硬盘
  10. Android来电,显示悬浮窗