
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在学习Java编程开发语言,而本文我们就通过案例分析来简单了解一下,Java编程锁的应用与类型分析。
锁是数据库系统区别于文件系统的一个关键特性,锁机制用于管理对共享资源的并发访问。粗略的分有行级锁、表级锁和页级锁,行级锁再分共享锁和排他锁等。要记住悲观锁和乐观锁是两个抽象的概念,并非实际数据库中的锁。
共享锁
共享锁(S锁):允许一个事务去读一行,会阻止其他事务获取相同数据集的排他锁(读取数据的时候不允许修改),也被称为读锁。当没有其他线程对查询结果集中的任何一行使用排他锁时,可以成功申请共享锁,否则会被阻塞。其他线程也可以读取使用了共享锁的表,而且这些线程读取的是同一个版本的数据。
排他锁
排他锁(X锁):允许获取排他锁去做更新操作,阻止其他事务获取相同数据的共享锁和排他锁(一个事务修改数据的时候,阻止其他事务对相同数据集做更新或者查询操作),也被称为写锁。
排他锁的使用方式比较一致,新增、更新和删除等DML操作语句会自动加上排他锁。而且SELECT...FORUPDATE也是排他锁。
意向锁
为了允许行锁和表锁共存,实现多粒度锁机制,InnoDB还有两种内部使用的意向锁(IntentionLocks),这两种意向锁都是表锁:
意向共享锁(IS):事务打算给数据行加共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁。
意向排他锁(IX):事务打算给数据行加排他锁,事务再给一个数据行加排他锁前必须先取得该表的IX锁。
悲观锁和乐观锁(抽象)
悲观锁:是从数据库层面加锁。总是假设坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它释放锁。
乐观锁:总是假设好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。