posts - 101,comments - 5,views - 14万

共享锁

多个事务的读操作可以同时进行,互不阻塞,但某个事务持有共享锁,其他事务不允许修改

如readWriteTrantLock就是共享锁

排他锁

当前持有锁的事务没有完成前,其他事务读、写都会阻塞。这样就能确保在给定时间内,只有一个事务能执行写入

如ReentrantLock、就是排他锁

 

在非Serializable隔离级别下,查询不加锁。

在Serializable隔离级别下,查询加共享锁。

任意隔离级别下增删改加排他锁。正是利用了这种锁机制,数据库保证了并发的读不隔离,并发的写一定隔离,并发的读写在某一方或多方为Serializable的级别时,实现串行化,保证完全可靠

 

Synchronized vs Lock

1. 修饰范围

synchronized可以修饰代码块、方法、静态方法、类。但reentrantLock只能用在代码块上

2. 锁是否自动释放

synchronized自动释放锁,ReentrantLock需要显示调用unlock()来释放锁

3.是否公平锁

synchronized是非公平锁,ReentrantLock可以是公平锁也可以是非公平锁

4.底层实现

synchronzied是JVM层面通过监视器实现的,而ReentrantLock是通过CAS+AQS程序级别的API实现的

5.响应中断不同

ReentrantLock可以响应中断,解决死锁问题;而synchronized不能响应中断

 

posted on   colorfulworld  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示