悲观锁 总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。 传统的关系型数据库中用到了很多这种锁机制,比如行级锁、表级锁、读锁、写锁等,都是在做操作之前先上锁。 使用场景:多写的场景 实现方式:加锁 乐观锁 总是假设最好的情况,每次去拿数据的时候都认为别人不会修 ...
分类:
数据库 时间:
2020-02-13 23:17:36
阅读次数:
129
封锁粒度 MySQL提供了两种封锁粒度:行级锁、表级锁 应该尽量只锁定需要修改的那部分数据,而不是所有的资源。 锁定的数据量越少,发生锁争用的可能性就越小,系统的并发程度就越高。 但是加锁需要消耗资源,锁的各种操作(获取锁、释放锁、检查锁状态)都会增加系统开销。 因此封锁粒度越小,系统开销就越大。 ...
分类:
数据库 时间:
2020-02-13 19:34:32
阅读次数:
93
一、简介 StampedLock类,在JDK1.8时引入,是对读写锁ReentrantReadWriteLock的增强,该类提供了一些功能,优化了读锁,写锁的访问,同时是读写锁之间可以互相转换,更细粒度控制并发。 首先明确下,该类的设计初衷是作为一个内部工具类,用于辅助开发其他线程安全组件,用得好, ...
分类:
其他好文 时间:
2020-02-12 22:29:04
阅读次数:
96
并发控制 锁粒度 MySQL 中提供了两种锁粒度:表级锁、行级锁。 表锁:写锁的优先级高于读锁;写锁的请求可以插入到读锁的前面,但读锁的请求却不能插入到写锁的前面; 行级锁:行级锁只在存储引擎层实现,在服务器层没有实现; 尽量只锁定需要修改的那部分数据,而不是所有的资源。锁定的数据量越少,发生锁争用 ...
分类:
数据库 时间:
2020-02-09 22:12:50
阅读次数:
102
简介 StampedLock 类,是 JDK 1.8 时引入,是对读写锁 ReentrantReadWriteLock 的增强,该类提供了一些功能。优化了读锁,写锁的访问。同时使得读锁和写锁之间可以相互转换,更细力度地控制并发。 该类的设计初衷是作为一个内部工具类,用于辅助线程安全组件开发,用的好可 ...
分类:
其他好文 时间:
2020-02-08 13:46:21
阅读次数:
68
共享锁(S锁):又称为读锁,可以查看但无法修改和删除的一种数据锁。如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排它锁。获准共享锁的事务只能读数据,不能修改数据。 共享锁下其它用户可以并发读取,查询数据。但不能修改,增加,删除数据。资源共享. 排它锁(X锁):又称为写锁、独占锁 ...
分类:
其他好文 时间:
2020-02-03 18:48:25
阅读次数:
81
在如表 20-3 所示的例子中,一个 session 使用 LOCK TABLE 命令给表 film_text 加了读锁,这 个 session 可以查询锁定表中的记录,但更新或访问其他表都会提示错误;同时,另外一个 session 可以查询表中的记录,但更新就会出现锁等待。 当使用 LOCK TA ...
分类:
数据库 时间:
2020-01-26 17:45:57
阅读次数:
91
概述 ReentrantReadWriteLock维护了一对相关的锁,它们分别是共享readLock和独占writeLock。关于共享读锁和排他写锁的概念其实很好理解。所谓共享读锁就是一个线程读的时候,其它线程也可以来读(共享),但是不能来写。排他写锁是指一个线程在写的时候,其它线程不能来写或读(排 ...
分类:
其他好文 时间:
2020-01-17 18:57:36
阅读次数:
67
锁的粗化和锁的消除 这个本来应该是在synchronized里面去说的,忘记了,不是很重要,但是需要知道有这么一个东西啦。 我们先来演示一下锁的粗化: StringBuffer sb = new StringBuffer(); public void lockCoarseningMethod(){ ...
分类:
编程语言 时间:
2020-01-16 10:23:18
阅读次数:
75
载自:https://my.oschina.net/meandme/blog/1839265 好长一段时间前,某些场景需要JUC的读写锁,但在某个时刻内读写线程都报超时预警(长时间无响应),看起来像是锁竞争过程中出现死锁(我猜)。经过排查项目并没有能造成死锁的可疑之处,因为业务代码并不复杂(仅仅是一 ...
分类:
编程语言 时间:
2020-01-06 14:30:38
阅读次数:
97