以redis分布式锁举例:
首先线程1设置一个锁并且设置一个过期时间
在过期时间内,其它线程(如线程2就不能得到分布式锁,然后会自旋不断尝试得到锁)
这里有一个问题:如果到了过期时间,线程1还没释放锁,那么redis就会自动释放该锁,然后线程2就能获得该锁,当线程1执行完毕时再释放锁就会释放线程2的锁
为了解决这个问题就必须让锁在线程1执行完之后再释放
线程1开一个子线程每隔一段时间检查线程1是否还持有该锁,如果持有就延长过期时间
当线程1释放锁之后其它线程就能得到锁然后继续执行了
以redis分布式锁举例:
首先线程1设置一个锁并且设置一个过期时间
在过期时间内,其它线程(如线程2就不能得到分布式锁,然后会自旋不断尝试得到锁)
这里有一个问题:如果到了过期时间,线程1还没释放锁,那么redis就会自动释放该锁,然后线程2就能获得该锁,当线程1执行完毕时再释放锁就会释放线程2的锁
为了解决这个问题就必须让锁在线程1执行完之后再释放
线程1开一个子线程每隔一段时间检查线程1是否还持有该锁,如果持有就延长过期时间
当线程1释放锁之后其它线程就能得到锁然后继续执行了