珠海做网站最好的公司有哪些,seo上海推广公司,电商详情页模板,信阳做网站优化乐观锁
乐观锁是一种乐观思想#xff0c;即认为读多写少#xff0c;遇到并发写的可能性低#xff0c;每次去拿数据的时候都认为别人不会修改#xff0c;所以不会上锁#xff0c;但是在更新的时候会判断一下在此期间别人有没有去更新这个数据#xff0c;采取在写时先读出…乐观锁
乐观锁是一种乐观思想即认为读多写少遇到并发写的可能性低每次去拿数据的时候都认为别人不会修改所以不会上锁但是在更新的时候会判断一下在此期间别人有没有去更新这个数据采取在写时先读出当前版本号然后加锁操作(比较跟上一次的版本号如果一样则更新)如果失败则要重复读-比较-写的操作。java 中的乐观锁基本都是通过 CAS 操作实现的CAS 是一种更新的原子操作比较当前值跟传入值是否一样一样则更新否则失败。
悲观锁
悲观锁是就是悲观思想即认为写多遇到并发写的可能性高每次去拿数据的时候都认为别人 会修改所以每次在读写数据的时候都会上锁这样别人想读写这个数据就会 block 直到拿到锁。 java 中的悲观锁就是 Synchronized,AQS 框架下的锁则是先尝试 cas 乐观锁去获取锁获取不到 才会转换为悲观锁如 RetreenLock。
自旋锁
自旋锁原理非常简单如果持有锁的线程能在很短时间内释放锁资源那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态它们只需要等一等(自旋)等持有锁的线程释放锁后即可立即获取锁这样就避免用户线程和内核的切换的消耗。