高并发场景下锁的使用技巧

如何确保一个方法,或者一块代码在高并发情况下,同一时间只能被一个线程执行,单体应用可以使用并发处理相关的 API 进行控制,但单体应用架构演变为分布式微服务架构后,跨进程的实例部署,显然就没办法通过应用层锁的机制来控制并发了。那么锁都有哪些类型,为什么要使用锁,锁的使用场景有哪些?今天我们来聊一聊高并发场景下锁的使用技巧

锁类别

  不同的应用场景对锁的要求各不相同,我们先来看下锁都有哪些类别,这些锁之间有什么区别。

Java 中的重量级锁 synchronize(悲观锁)

Java 中的轻量级锁 volatile 和 CAS(乐观锁)

数据库行锁(悲观锁)

悲观锁(synchronize)

乐观锁(数据库版本好)

分布式锁(Redis锁) 

乐观锁

  就好比说是你是一个生活态度乐观积极向上的人,总是往最好的情况去想,比如你每次去获取共享数据的时候会认为别人不会修改,所以不会上锁,但是在更新的时候你会判断这期间有没有人去更新这个数据。

  乐观锁使用在前,判断在后。我们看下伪代码:

reduce() { select total_amount from table_1 if(total_amount < amount ){ return failed. } //其他业务逻辑 update total_amount = total_amount - amount where total_amount > amount;
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxsgx.html