数据库锁,死锁,解决高并发面试题

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

面试

提示:以下是本篇文章正文内容,下面案例可供参考

一、锁是什么?

将某种资源私有化的一种物品,没错java里面的锁也是这种特性,它可以让某个方法,某个变量或某个通道,在某个时刻下只能被一个线程占用。只有当这个锁释放了,另外的线程才可以使用。例子:上厕所,一个同事上厕所把门锁上,这个时候厕所就被上锁了,别人要想进去,只能等这位同事释放锁后出来,其他同事才可进入。这个厕所可以看成是临界区,同事就是线程。

二、数据库锁

数据的锁分为三种:

		1、行级锁:被定义为是一种排它锁,防止其它事务修改。
		2、表级锁:就是对当前操作的表加锁,简单,资源消耗少。
				表级锁又被分为:共享锁和排它锁
		3、页级锁:介于行级锁和表级锁之间的一种锁,表级锁冲突多速度快,行级锁冲突少速度慢。

三、什么是死锁?

	死锁就是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,导致恶性循坏。
		解决:
			1:不同程序会并发存取多个表,约定以相同的顺序访问表。
			2:同一事务中尽可能做到一次锁定所需要的所有资源。
			3:对于容易产生死锁的业务部分,尝试升级锁定颗粒度,通过表级锁来减少死锁发生的概率。

四、Mysql解决并发

	一般采用三种控制方式:悲观锁、乐观锁和时间戳
		乐观锁:一个用户在读取数据的时候,别人不会去写自己所读的数据
		悲观锁:和乐观锁相反,自己修改某条数据的时候,不允许别人读取该条数据。
					悲观锁又被分为:共享锁和排它锁
		时间戳:在数据库中单独加一列时间戳,如一个`TimeStamp`,就是每次读出来的时候,把该字段也读出来,写回去的时候把该字段+1,提交之前先和数据库的该字段进行比较,如果比数据库的值大就保存,小就不保存。

总结

自己写的,不是很好,不要喷!
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值