一、锁 1、锁的定义 锁即是一种用来协调多线程或进程并发使用同一共享资源的机制 2、锁的分类 从性能上分类:乐观锁和悲观锁 从数据库操作类型上分类:读锁和写锁 从操作粒度上分类:表锁和行锁 2.1 从性能上分类 2.1.1 乐观锁 乐观锁顾名思义就是操作的时候很乐观,认为操作不会产生并发问题(不会有 ...
分类:
数据库 时间:
2020-01-03 19:48:11
阅读次数:
158
ReentrantReadWriteLock分别实现读锁和写锁,在大多数并发场景下读多于写,是比ReentrantLock 排他锁的并发性能好,吞吐量高,合理运用,可以使我们程序运行更有效率! ...
分类:
编程语言 时间:
2019-12-30 23:33:43
阅读次数:
161
什么是锁?MySQL 中提供了几类锁? 锁是实现数据库并发控制的重要手段,可以保证数据库在多人同时操作时能够正常运行。MySQL 提供了全局锁、行级锁、表级锁。其中 InnoDB 支持表级锁和行级锁,MyISAM 只支持表级锁。 详解锁 全局锁: 对整个数据库实例加锁,MySQL提供了一个加全局读锁 ...
分类:
数据库 时间:
2019-12-28 16:04:03
阅读次数:
86
概述 在开发过程中,会有很多地方用到锁,比如多线程修改一个对象时,为了防止多个线程同时修改,会采用加锁的机制,还有数据库在多个线程修改同一条记录时,也会有读锁,写锁等,所有这些都为了解决一个问题,在并发情况修改同一个值的时候,如何可以保证这个值不出问题。举个简单的例子说明:比如淘宝上某款商品库存只剩 ...
分类:
编程语言 时间:
2019-12-28 12:54:52
阅读次数:
84
StampedLock 是从 JDK1.8 开始提供,它的性能比 ReadWriteLock 好 StampedLock 支持:乐观读锁、悲观读锁、写锁 StampedLock 的悲观读锁、写锁,与 ReadWriteLock 的读锁、写锁用法相似:读读可并行、读写互斥、写写互斥。 StampedL ...
分类:
其他好文 时间:
2019-12-24 09:58:10
阅读次数:
65
/** * StampedLock和ReadWriteLock相比,改进之处在于:读的过程中也允许获取写锁后写入!这样一来,我们读的数据就可能不一致,所以,需要一点额外的代码来判断读的过程中是否有写入,这种读锁是一种乐观锁。* 乐观锁的意思就是乐观地估计读的过程中大概率不会有写入,因此被称为乐观锁。 ...
分类:
其他好文 时间:
2019-12-20 15:22:33
阅读次数:
65
前言 前两篇我们讲述了ReentrantLock的加锁释放锁过程,相对而言比较简单,本篇进入深水区,看看ReentrantReadWriteLock-读写锁的加锁过程是如何实现的,继续拜读老Lea凌厉的代码风。 一、读写锁的类图 读锁就是共享锁,而写锁是独占锁。读锁与写锁之间的互斥关系为:读读可同时 ...
分类:
其他好文 时间:
2019-12-19 23:12:58
阅读次数:
70
数据库事物的4个特性。 A原子性:多次操作要么全部成功,要么全部失败。undo日志是在事务执行失败的时候撤销对数据库的操作,保证了事务的原子性(Atomicity) C一致性:一致性这个最不好理解。数据库的AID特性使得,数据库能够达到一致性,这个目标。 I隔离性:两个事物操作同一个的表,能做到互不 ...
分类:
其他好文 时间:
2019-12-08 01:04:29
阅读次数:
90
Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景 一、相关名词 |--表级锁(锁定整个表) |--页级锁(锁定一页) |--行级锁(锁定一行) |--共享锁(S锁,MyISAM 叫做读锁) |--排他锁(X锁,MyISAM 叫做写锁) |--悲观锁(抽象性,不真实存在这个锁) |--乐观锁(抽象 ...
分类:
数据库 时间:
2019-12-04 18:32:37
阅读次数:
112
共享锁(S锁):又称读锁,若事务T对数据对象A加上S锁,其他事务只能再对A加S锁,而不能加X锁,直到T释放A上的S锁。排他锁(X锁):又称写锁。若事务T对数据对象A加上X锁,其他事务不能再对A加任何锁,直到T释放A上的锁。 总结:共享锁,可以再加共享锁。排他锁,不能加任何锁 某一场地故障时,可使用其 ...
分类:
数据库 时间:
2019-11-29 11:01:09
阅读次数:
92