博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
悲观锁与乐观锁
阅读量:3725 次
发布时间:2019-05-22

本文共 694 字,大约阅读时间需要 2 分钟。

一.乐观锁

乐观锁是当前线程对数据进行修改时,认为其他线程不会对自己操作的数据进行更改,在数据库层次上使用版本号来避免多线程同时写入,需要满足"提交版本必须大于记录当前版本才能执行更新"的策略

private void updateCountByOpti(Connection connection,Stock stock) throws SQLException {        String sql = "update stock set count = count -1,version = version + 1 where version = " + stock.getVersion();        PreparedStatement preparedStatement = connection.prepareStatement(sql);        int update = preparedStatement.executeUpdate();        if (update==0)            throw new RuntimeException("没抢到");    }

CAS也是一种乐观锁机制,当需要更新时,判断预期值和真实值是否相等,相等则更新,不等一般会自旋操作,在JDK 1.8中CAS不等或者是返回false或者是外置循环使其最后一定更新,

二.悲观锁

悲观锁是当前线程对数据进行修改时,认为其他线程一定会会对自己操作的数据进行更改,数据库可以加悲观锁,如读锁、写锁、行级锁,Java中的synchronizeds是悲观锁

可参考

 

转载地址:http://uyonn.baihongyu.com/

你可能感兴趣的文章
git托管代码到GitHub和Gitee(码云)
查看>>
你永远无法叫醒一个装睡的人(关于自媒体发展的详细介绍)
查看>>
STM32CubeMX-6.1.1 编写 stm32H743IIT6 生成keil工程时出现错误
查看>>
多文件编译写法
查看>>
操作系统--中断与系统调用
查看>>
Error running ‘ ‘D:/openjdk-16.0.1_windows-x64_bin/jdk-16.0.1/bin‘ is not a valid JRE home
查看>>
一行只能放一个元素,搜索框输入框el-input不能调整大小,el-col,el-row的形式失效.....等问题-elemntui样式为引入---某坑记录指南
查看>>
js中slice、splic、splite相互间的区别
查看>>
美化代码工具---Prettier使用简单介绍
查看>>
将中国标准时间转化为yyyy-MM-dd 00:00:00格式
查看>>
Invalid prop: type check failed for prop “index“. Expected String, got Undefined
查看>>
改变一个ppt所有的幻灯片的背景色和字体颜色
查看>>
联想电脑上的音量键和F1键重合如何区别使用
查看>>
免费的且功能强大的截屏软件---Snipaste
查看>>
杂-格上数字签名重要符号
查看>>
格签名中陷门生成和原像采样的联系
查看>>
格签名相似概念区分: SVP、SIS、LWE的区分
查看>>
公开算法代码
查看>>
canvas的学习第一篇
查看>>
es6中的set和map
查看>>