共享锁
多个事务的读操作可以同时进行,互不阻塞,但某个事务持有共享锁,其他事务不允许修改
如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不能响应中断
标签:事务,Synchronized,synchronized,ReentrantLock,划分,级别,Serializable,隔离 From: https://www.cnblogs.com/enhance/p/17498799.html