Hibernate之悲观锁【共享锁、排他锁】

共享锁【写锁】少用

共享锁的现象:注意,操作要快,不然会超时

1、分别打开两个Mysql命令行 A和B


Hibernate之悲观锁【共享锁、排他锁】_第1张图片
image.png

2、使用相同数据库
3、A和B依次输入 start transaction;
4、A和B查询相同表 select * from 表名 lock in share mode;
5、A 输入更新语句, B 输入更新语句【总之会有一方卡住】


Hibernate之悲观锁【共享锁、排他锁】_第2张图片
image.png

卡住的原因是一方拿到了共享锁,拿到共享锁的一方提交事务【commit】后另一方才可以执行;

排他锁【写锁】常用锁行,不建议锁表

1、分别打开两个Mysql命令行 A和B
2、使用相同数据库
3、A和B依次输入 start transaction;
4、A输入select * from t_customer for update ;【锁表】后,发现界面输出;
5、B输入select * from t_customer for update ;【锁表】后,界面无输出;


Hibernate之悲观锁【共享锁、排他锁】_第3张图片
image.png

6、A提交事务【commit】后,B有输出


Hibernate之悲观锁【共享锁、排他锁】_第4张图片
image.png

7、执行锁行操作A输入select * from t_customer where id=1 for update ;【锁表】后,发现界面输出;
8、B执行select * from t_customer where id=2 for update ;有输出
image.png

9、B执行select * from t_customer where id=1 for update ;卡住
Hibernate之悲观锁【共享锁、排他锁】_第5张图片
image.png

10、A提交事务【commit】后,B执行select * from t_customer where id=1 for update ;输出
image.png

Hibernate写锁【排他锁】实现

现象:命令行开启线程,应用程序开启线程

1、命令行就绪


Hibernate之悲观锁【共享锁、排他锁】_第6张图片
image.png

2、执行应用程序


Hibernate之悲观锁【共享锁、排他锁】_第7张图片
image.png

3、应用程序输出【卡住】
Hibernate之悲观锁【共享锁、排他锁】_第8张图片
image.png

3、命令行提交事务【commit】


Hibernate之悲观锁【共享锁、排他锁】_第9张图片
image.png

4、查看应用程序控制台


Hibernate之悲观锁【共享锁、排他锁】_第10张图片
image.png

你可能感兴趣的:(Hibernate之悲观锁【共享锁、排他锁】)