共享锁(S锁):如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁,直到已释放所有共享锁。获准共享锁的事务只能读数据,不能修改数据。 排他锁(X锁):如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的锁,直到在事务的末尾将资源上的锁释放为止。获准排他锁的事务既能读数据,又能修改数据。
自旋锁与互斥锁有点类似,只是自旋锁不会引起调用者睡眠,如果自旋锁已经被别的执行单元保持,调用者就一直循环在那里看是否该自旋锁的保持者已经释放了锁,"自旋"一词就是因此而得名。
- 自旋锁:自旋,jvm默认是10次吧,有jvm自己控制。for去争取锁
- 自旋锁的其他种类
- 阻塞锁:被阻塞的线程,不会争夺锁。
- 可重入锁: 多次进入改锁的域
- 读写锁
- 互斥锁:锁本身就是互斥的
- 悲观锁:不相信,这里会是安全的,必须全部上锁
- 乐观锁:相信,这里是安全的。
- 公平锁:有优先级的锁
- 非公平锁:无优先级的锁
- 偏向锁:无竞争不锁,有竞争挂起,转为轻量锁
- 对象锁:锁住对象
- 线程锁
- 锁粗化:多锁变成一个,自己处理
- 轻量级锁:CAS 实现
- 锁消除:偏向锁就是锁消除的一种
- 锁膨胀:jvm实现,锁粗化
- 信号量:使用阻塞锁 实现的一种策略