1. 单服务线程锁

    在单个服务的情况下,直接使用 java 虚拟机级别的锁即可完成。

    1. 集群分布式锁

    引入某个中间件来实现多个服务共享资源互斥访问和修改。
    例如:使用 redis 单线程和 setIfAbsent 来实现加锁

    1. 集群数据库悲观锁

    在某个事物内,要拿到那个操作的数据时,在 select 后面加上 for update(mysql -> inodb 才有效) 对满足条件的数据加锁。在该事物未 commit 后。所有的查询都将等待前面的事物执行完成。