为什么Redis 是单线程却能支撑高并发?(为什么redis比mysql快)
246
2022-08-04
并发编程之J.U.C的第一篇
AQS 原理
全称是 AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架
特点 :
用state 属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁
getState - 获取 state 状态
setState - 设置 state 状态
compareAndSetState - cas 乐观锁机制设置 state 状态
独占模式是只有一个线程能够访问资源,而共享模式可以允许多个线程访问资源
提供了基于FIFO的等待队列,类似于 Monitor的EntryList
条件变量来实现等待、唤醒机制,支持多个条件变量,类似于 Monitor的WaitSet
子类主要实现这样一些方法 (默认抛出UnsupportedOperationException)
ReentrantLock 原理
1. 非公平锁实现原理
2)可重入原理
3. 可打断原理
5) 条件变量实现原理
3. 读写锁
3.1 ReentrantReadWriteLock
当读操作远远高于写操作时,这时候使用读写锁让 读-读可以并发,提高性能。
类似于数据库中的select 。。。from 。。。lock in share mode
提供一个数据容器类内部分别使用读锁保护数据的read()方法,写锁保护数据的write()方法
注意事项
缓存更新策略
读写锁原理
图解流程
读写锁同的是同一个Sycn同步器,因此等待队列、state等也是同一个
t1 w.lock,t2 r.lock
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~