[hollis笔记]锁(数据库)+锁(JVM)

现有两处火车票售票点,同时读取某一趟列车车票数据库中车票余额为 X。

两处售票点同时卖出一张车票,同时修改余额为 X -1写回数据库,这样就造成了实际卖出两张火车票而数据库中的记录却只少了一张。

产生这种情况的原因是因为两个事务读入同一数据并同时修改,其中一个事务提交的结果破坏了另一个事务提交的结果,导致其数据的修改被丢失,破坏了事务的隔离性。

并发控制要解决的就是这类问题。

 

一、按操作划分,可分为DML锁DDL锁

二、按锁的粒度划分,可分为表级锁行级锁页级锁(mysql)

三、按锁级别划分,可分为共享锁排他锁

四、按加锁方式划分,可分为自动锁显示锁

五、按使用方式划分,可分为乐观锁悲观锁

 

 

 

 

 

 

共享锁(Share Lock)-只能读不能改

共享锁又称读锁,是读取操作创建的锁。其他用户可以并发读取数据,但任何事务都不能对数据进行修改(获取数据上的排他锁),直到已释放所有共享锁。

如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。

用法

SELECT ... LOCK IN SHARE MODE;

在查询语句后面增加LOCK IN SHARE MODE,Mysql会对查询结果中的每行都加共享锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请共享锁,否则会被阻塞。其他线程也可以读取使用了共享锁的表,而且这些线程读取的是同一个版本的数据。

排他锁(eXclusive Lock)-拿到才能读和改

排他锁又称写锁,如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。获准排他锁的事务既能读数据,又能修改数据。

用法

SELECT ... FOR UPDATE;

在查询语句后面增加FOR UPDATE,Mysql会对查询结果中的每行都加排他锁,当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请排他锁,否则会被阻塞。

意向锁

意向锁是表级锁,其设计目的主要是为了在一个事务中揭示下一行将要被请求锁的类型。InnoDB中的两个表锁:

意向共享锁(IS):表示事务准备给数据行加入共享锁,也就是说一个数据行加共享锁前必须先取得该表的IS锁

意向排他锁(IX):类似上面,表示事务准备给数据行加入排他锁,说明事务在一个数据行加排他锁前必须先取得该表的IX锁。

个人针对InnoDB内容的补充:

MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。

对于insert、update、delete,InnoDB会自动给涉及的数据加排他锁(X);对于一般的Select语句,InnoDB不会加任何锁,事务可以通过以下语句给显示加共享锁或排他锁。

共享锁:SELECT ... LOCK IN SHARE MODE;

排他锁:SELECT ... FOR UPDATE;

程序员Hollis八股文书,可以简单理解为在面试中,对程序员技能和经验的套路化表述。具体表现为以下几个方面: 首先,Hollis八股文书会对程序员的技能进行详细罗列和说明。例如,程序员需要具备的编程语言技能、常见框架和开发工具的使用经验等。这一部分往往是将自己的技能进行有条理的整理和展示。 其次,Hollis八股文书会强调自己对某些重要技术的了解和运用。这可能包括前沿技术、热门框架或是其在项目中积累的经验。通过突出自己对这些技术的熟练程度和在实际项目中的应用能力,从而增加自己的竞争力。 另外,Hollis八股文书往往会在项目经验方面进行详细描述。这包括自己参与的项目的规模、工作内容、所负责的模块以及解决的技术难题等。通过详细的描述,可以展示自己在项目中所取得的成就和实践经验,从而证明自己的工作能力和价值。 最后,Hollis八股文书会考虑到自己的学习能力和自我提升。这可能包括自己在工作中不断学习新知识和技术,并且能够快速适应新环境和解决问题的能力。同时,也会强调自己的团队合作能力,因为在现实工作中,合作和沟通能力同样重要。 综上所述,Hollis八股文书是程序员在面试中为了展示自己的技能和经验而使用的一种套路化表述方式。通过具体的技能描述、重要技术的突出、项目经验的详细描述以及学习能力和团队合作能力的展示,旨在提高自己的竞争力,从而争取到更好的职位机会。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值