乐观锁
-
认为数据在一般情况下不会造成冲突,所以在访问记录前不会加排它锁;
-
在进行数据提交更新时,才会正式对数据冲突与否进行检测;
-
乐观锁并不会使用数据库提供的锁机制,一般在表中添加version字段或者使用业务状态来实现;
-
乐观锁直到提交时才锁定,所以不会产生任何死锁。
悲观锁
-
指对数据被外界修改保持保守态度,认为数据很容易就被其他线程修改;
-
在数据被处理前先对数据进行加锁,并在整个数据处理过程中,使数据处于锁定状态;
-
悲观锁的实现往往依靠数据库提供的锁机制。
公平锁
- 表示线程获取锁的顺序是按照线程请求锁的时间早晚来决定的,即最早申请锁的线程将最早获取到锁。
非公平锁
-
在运行时闯入,根据具体调度方法确定顺序
-
使用ReentrantLock方法来实现
独占锁
- 保证任何时候都只有一个线程能得到锁,ReentrantLock就是以独占方式实现的。是一种悲观锁。
共享锁
- 可以同时由多个线程持有,允许一个资源可以被多线程同时进行读操作。是一种乐观锁。
可重入锁
-
当一个线程再次获取它自己已经获取的锁时不被