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

北京做网站浩森宇特深圳网络推广网站

北京做网站浩森宇特,深圳网络推广网站,17模板网入口,wordpress 插件 发布文章目录 一、MySQL锁机制 1.1 按锁粒度划分 1.2 按锁功能划分 1.3 InnoDB锁实现机制 (1)记录锁(Record Lock) (2) 间隙锁(Gap Lock) (3) 临键锁(Next-Key Lock) (4) 插入意向锁(Insert Intention Lock) 二、基于 JVM 本地锁实现,保证线程安全 2.1 线程不安全的分析 2.1…

目录

一、MySQL锁机制

1.1 按锁粒度划分

1.2 按锁功能划分

1.3 InnoDB锁实现机制

(1)记录锁(Record Lock)

(2) 间隙锁(Gap Lock)

(3) 临键锁(Next-Key Lock)

(4) 插入意向锁(Insert Intention Lock)

二、基于 JVM 本地锁实现,保证线程安全

2.1 线程不安全的分析

2.1.1 多线程并发访问(未加锁)

2.2 基于 synchronized 加锁访问

2.3 基于 synchronized 加锁访问

2.4 JVM 本地锁的缺陷

三、基于 MySQL 锁实现,保证线程安全问题

3.1 基于原子 SQL 实现

3.2 基于悲观锁实现(灵活多 SQL )

3.2.1 原生 SQL 实现

3.2.2 Java 代码实现

3.2.3 悲观锁优缺点

3.2.4 死锁演示

3.3 基于乐观锁实现(CAS)

3.3.1 原生SQL实现

3.3.2 Java 代码实现

3.3.3 乐观锁存在的问题

四、本地不同类型锁的总结


一、MySQL锁机制

1.1 按锁粒度划分

  • 表级锁​:锁定整张表

    • 优点:开销小,加锁快
    • 缺点:并发度低
    • 实现:LOCK TABLES语句或存储引擎自动加锁
  • 行级锁​:锁定单行记录

    • 优点:并发度高
    • 缺点:开销大,加锁慢
    • 实现:InnoDB通过索引实现
  • 页级锁​:锁定一页(16KB)

    • 折中方案,BDB引擎使用

1.2 按锁功能划分

  • 共享锁(S锁)​​:

    • 语法:SELECT ... LOCK IN SHARE MODE
    • 特性:多个事务可同时获取,但不能与排他锁共存
  • 排他锁(X锁)​​:

    • 语法:SELECT ... FOR UPDATE
    • 特性:独占锁,其他事务不能获取任何锁
  • 意向锁(Intention Lock)​​:

    • 表级锁,表示事务将要获取行锁
    • IS锁(意向共享锁):事务准备给行加S锁
    • IX锁(意向排他锁):事务准备给行加X锁

1.3 InnoDB锁实现机制

(1)记录锁(Record Lock)
  • 锁定索引中的单条记录
  • 实现方式:通过索引项加锁
(2) 间隙锁(Gap Lock)
  • 锁定索引记录间的间隙
  • 防止幻读问题
  • 示例:SELECT * FROM t WHERE id > 10 AND id < 20 FOR UPDATE
(3) 临键锁(Next-Key Lock)
  • 记录锁+间隙锁的组合
  • 锁定记录及记录前的间隙
  • InnoDB默认行锁算法
(4) 插入意向锁(Insert Intention Lock)
  • 特殊的间隙锁
  • 多个事务在相同间隙插入不同记录时不冲突

二、基于 JVM 本地锁实现,保证线程安全

2.1 线程不安全的分析

多线程环境下多个线程(并发用户访问)访问同一个共享资源,并对资源进行修改(触发了线程安全问题)。

接下来只关注 Service 层的逻辑实现

2.1.1 多线程并发访问(未加锁)

1. 创建多线程环境下生产级减库存案例

@Service
public class StockService {private Stock stock = new Stock();public void deduct(){stock.setStock(stock.getStock()-1);System.out.println("扣减成功,剩余库存:"+stock.getStock());}
}

2. 运行项目,通过 JMeter 进行并发测试

查看聚合报告,样本数量为 5000 次,吞吐量为 1900个事务/秒 左右。

3. 查看项目日志:发生超卖现象。

此时查看 MySQL 表中的 1001 商品编号的第一条记录,校验库存数量是否为0:

2.2 基于 synchronized 加锁访问

1. 修改减库存的方法,进行加锁操作:synchronized 直接修改方法(底层是基于 Monitor 实现)

http://www.dtcms.com/wzjs/413916.html

相关文章:

  • 淘宝上做网站排名百度推广年费多少钱
  • wordpress 网站开发四川百度推广和seo优化
  • 营口做网站企业优化关键词可以选择哪个工具
  • 世界服装鞋帽网免费做网站seo优化排名易下拉用法
  • 帝国cms做微网站软文发布平台排名
  • 柚段子wordpress东莞seo快速排名
  • 网站运营推广怎么做许昌网络推广公司
  • 客户开发软件工具seo收费
  • 网站 宽屏窄屏自适应嘉定区整站seo十大排名
  • 包头网站设计百度推广公司电话
  • 做教育集团的网站建设网页查询
  • 用java做网站的步骤网站后台管理系统
  • 微信微网站开发百度云seo实战培训班
  • 维基百科建设网站打字赚钱平台 学生一单一结
  • 网站建设与管理感想网店运营
  • 龙华做手机网站建设重庆seo排名外包
  • 想发布oa网站 需要备案吗网站免费推广软件
  • 广州市 住房建设局网站首页精准营销的三要素
  • 浙江省网站建设报价页面优化的方法有哪些
  • 出售网站平台百度官方网站下载安装
  • 南通网站建设方法网站优化建议
  • 外国网站建站百度客服工作内容
  • 做双语网站福州seo代理商
  • 聊城做网站公司信息交换友情链接的网站标准是什么
  • wordpress 适合外贸站cpc广告点击日结联盟
  • 南昌公司做网站山东网站建设
  • 已注册域名怎么做网站呢怎么样在百度上免费推广
  • 建设网站的网站空间客户资源买卖平台
  • 网站如何做监测链接seo站长网怎么下载
  • 怎么在自己网站上做拼图重庆自动seo