单服务线程锁 在单个服务的情况下,直接使用 java 虚拟机级别的锁即可完成。 集群分布式锁 引入某个中间件来实现多个服务共享资源互斥访问和修改。例如:使用 redis 单线程和 setIfAbsent 来实现加锁 集群数据库悲观锁 在某个事物内,要拿到那个操作的数据时,在 select 后面加上 for update(mysql -> inodb 才有效) 对满足条件的数据加锁。在该事物未 commit 后。所有的查询都将等待前面的事物执行完成。