共享锁

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

如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 2023-06-23 10:23  colorfulworld  阅读(8)  评论(0编辑  收藏  举报