单应用中,如果要确保多线程修改同一个资源的安全性 加synchronized就可以了
但是性能不高
而mybatis-plus的乐观锁就可以很好的解决这类问题
但是这样的锁机制,只在单应用中有效
试想,在分布式下,有没有可能出现多个应用中的线程同时去修改同一个数据资源的并发问题
例如A B两个应用的线程
A应用的线程和B应用的线程同时去修改数据库中的某条数据
例如
数据库有条数据 id为1 count为500 现在A应用需要给这条数据的count加20 B应用需要给这条数据的count加30
A应用线程查出来 id为1的这条数据 现在的count是500
B应用线程查出来 id为1的这条数据 现在的count也是500
那么这种情况下 去update的时候就会出现 数据与真实不一致的情况
在分布式环境下,单纯依赖单应用中的锁机制(如 synchronized
)和乐观锁无法解决跨实例的并
发修改问题。要确保多个应用实例中线程对同一数据资源的修改安全性,通常需要使用分布式锁或
者分布式事务。
分布式锁可以确保在多个实例之间,对共享资源的并发访问是安全的。